Artigo: 172711 - Última revisão: sábado, 20 de Janeiro de 2007 - Revisão: 3.1

ACC: FileCopy declaração não pode copiar abrir ficheiros

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Avançado: Requer conhecimentos avançados sobre codificação, interoperabilidade e multi-utilizador.

Nesta página

Expandir tudo | Reduzir tudo

Sintomas

Quando copiar programaticamente um ficheiro com a instrução FileCopy no Visual Basic for Applications, poderá receber a seguinte mensagem de erro:
Run-time error '70'

Permissão negada

Este artigo pressupõe que está familiarizado com o Visual Basic for Applications e criação de aplicações do Microsoft Access utilizando as ferramentas de programação fornecidas com o Microsoft Access. Para mais informações sobre o Visual Basic for Applications, consulte a versão do manual "Criar aplicações com o Microsoft Access".

Causa

O ficheiro está aberto, o que impede a instrução FileCopy de copiar o ficheiro.

Resolução

Em vez de utilizar a instrução FileCopy, utilize um dos seguintes métodos para programaticamente copiar o ficheiro.

Aviso: As funções seguintes permitem-lhe copiar um ficheiro aberto. Se o ficheiro de origem for alterado enquanto a operação de cópia está em processo, o ficheiro de destino pode estar incompleto ou poderá ficar danificado.

Método 1 - chamar a função CopyFile() da API do Windows

Um método de forma programática copiar um ficheiro é chamar a função CopyFile() da API do Microsoft Windows. Para chamar a função CopyFile() da API do Microsoft Windows, siga estes passos:
  1. Conclua os passos 1 a 4 a partir de "passos para reproduzir o comportamento" secção deste artigo.
  2. Crie um módulo e escreva as seguintes linhas nas declarações de secção:
          Option Explicit
    						
          Declare Function apiCopyFile Lib "kernel32" Alias "CopyFileA" _
          (ByVal lpExistingFileName As String, _
          ByVal lpNewFileName As String, _
          ByVal bFailIfExists As Long) As Long
    						
  3. Escreva o seguinte procedimento:
          Sub CopyFile(SourceFile As String, DestFile As String)
          '---------------------------------------------------------------
          ' PURPOSE: Copy a file on disk from one location to another.
          ' ACCEPTS: The name of the source file and destination file.
          ' RETURNS: Nothing
          '---------------------------------------------------------------
            Dim Result As Long
             If Dir(SourceFile) = "" Then
                MsgBox Chr(34) & SourceFile & Chr(34) & _
                   " is not valid file name."
             Else
                Result = apiCopyFile(SourceFile, DestFile, False)
             End If
          End Sub
    						
  4. Para testar este procedimento, escreva a seguinte linha na janela de depuração e, em seguida, prima ENTER:

    CopyFile "< caminho para a base de dados adamastor.mdb >", "C:\Northwind.mdb"

    Tenha em atenção que a base de dados Adamastor.mdb é copiada para a pasta raiz da unidade C, mesmo que seja aberta noutra instância do Microsoft Access.

Método 2 - chamar o comando copy do MS-DOS

Outro método para programaticamente copiar um ficheiro é chamar o comando Copiar MS-DOS a partir de uma função Shell() no Visual Basic for Applications. Para chamar o comando copy do MS-DOS, siga estes passos:
  1. Conclua os passos 1 a 4 a partir de "passos para reproduzir o comportamento" secção deste artigo.
  2. Crie um módulo e escreva a seguinte linha de declarações secção se não estiver já existir:
          Option Explicit
    						
  3. Se estiver a utilizar o Microsoft Windows 95, escreva o seguinte procedimento:
          Sub CopyFile(SourceFile As String, DestFile As String)
          '---------------------------------------------------------------
          ' PURPOSE: Copy a file on disk from one location to another.
          ' ACCEPTS: The name of the source file and destination file.
          ' RETURNS: Nothing
          '---------------------------------------------------------------
             Dim CopyString As String
             If Dir(SourceFile) = "" Then
                MsgBox Chr(34) & SourceFile & Chr(34) & _
                   " is not a valid file name."
             Else
                SourceFile = Chr(34) & SourceFile & Chr(34)
                DestFile = Chr(34) & DestFile & Chr(34)
                CopyString = "COMMAND.COM /C COPY " & SourceFile & _
                   " " & DestFile
                Call Shell(CopyString, 0)
             End If
          End Sub
    
       If you are using Microsoft Windows NT, use the same procedure, but
       change the line
    
          CopyString = "COMMAND.COM /C COPY " & SourceFile & _
    
       to:
    
          CopyString = "CMD.EXE /C COPY " & SourceFile & _
    						
  4. Para testar este procedimento, escreva a seguinte linha na janela de depuração e, em seguida, prima ENTER:

    CopyFile "< caminho para a base de dados adamastor.mdb >", "C:\Northwind.mdb"

    Tenha em atenção que a base de dados Adamastor.mdb é copiada para a pasta raiz da unidade C, mesmo que seja aberta noutra instância do Microsoft Access.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Passos para reproduzir o comportamento


  1. Inicie o Microsoft Access.
  2. Abra a base de dados exemplo Adamastor.mdb.
  3. Inicie uma nova instância do Microsoft Access.
  4. Crie uma nova base de dados em branco.
  5. Crie um módulo e escreva a seguinte linha de declarações secção se não estiver já existir:
          Option Explicit
    						
  6. Escreva o seguinte procedimento:
          Sub CopyFile(SourceFile As String, DestFile As String)
             FileCopy SourceFile, DestFile
          End Sub
    						
  7. Para testar este procedimento, escreva a seguinte linha na janela de depuração e, em seguida, prima ENTER:

    CopyFile "< caminho para a base de dados adamastor.mdb >", "C:\Northwind.mdb"

    Repare que receberá o erro listado na secção "Sintomas".

Referências

Para obter mais informações sobre a instrução FileCopy, procure o índice remissivo da ajuda for "FileCopy statement".

A informação contida neste artigo aplica-se a:
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Palavras-chave: 
kbmt kbprb kbprogramming KB172711 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 172711  (http://support.microsoft.com/kb/172711/en-us/ )
Retired KB ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.