"Estou com um problema no Access 2000. Vez ou outra a seguinte mensagem é ativada:
"Erro ao acessar arquivo. A conexão de rede pode ter sido perdida."
Recordo de haver lido alguma coisa sobre o assunto aqui mesmo no AtivoAccess mas, agora
não consigo mais localizar.
Poderiam oferecer-me alguma indicação de como resolver esta situação?
Trata-se aqui do pior bug do Access 2000.
Quando ocorre? Ocorre quando há duas versões incompatíveis do componente VBE.DLL na máquina de desenvolvimento (VB6 + Access 2000, por exemplo), e o desenvolvedor importa algum objeto com código (um formulário, relatório, módulo, ou mesmo um TXT com código) e fecha o MDB sem fazer a compilação do código.
Apesar da mensagem falar em conexão de rede, o bug não tem nada a ver com isto. O que ocorre é a quebra do próprio código mesmo.
O desenvolvedor precisa fazer duas coisas:
a) Atualizar os Service Packs do Office 2000.
b) Ter o hábito de compilar o código sempre que algum objeto for importado.
Ambas são boas práticas, independente de haver bug do Access ou não.
Estas medidas evitarão que o banco de dados volte a se corromper pelo mesmo motivo, mas o MDB corrompido não será recuperado. Aliás, a recuperação do MDB com o problema “conexão de rede perdida” costuma ser difícil (às vezes impossível). Eu já consegui reparar de duas formas:
a) Abrir o MDB usando uma versão mais recente do Access, ativar a janela do VBA e nela excluir o módulo do objeto corrompido (ou seja, aquele que você importou de uma fonte externa). Depois, vá à janela de banco de dados e exclua o próprio objeto. Compile, e se estiver OK, faça novamente a importação. Compile novamente antes de fechar o MDB.
b) Abra a janela do VBA e salve cada módulo do projeto em um arquivo texto. Entre na estrutura de cada formulário e relatório do banco de dados e ajuste a propriedade “Has module” (Tem módulo) para Não, a fim de quebrar todas as ligações com o VBA. Crie um novo MDB e importe todos os objetos (exceto os módulos). Vá em cada objeto, abra o módulo e cole os procedimentos salvos no TXT. É um trabalho e tanto, mas funciona.
Este é um assunto que não costuma gerar dúvidas. Se alguém desenvolve uma aplicação Visual Basic acessando uma base de dados Access (ou seja, o Jet), pode distribuir o aplicativo para máquinas que não tenham o MS-Access ou o MS-Office instalados.
É óbvio, certo? Mas onde está escrito? Isto é difícil de se achar...
Na Microsoft, após vasculhar bastante, encontrei este documento que afirma ser legal a distribuição do componente Jet a partir de aplicações Visual Basic e Visual C++: http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnaraccessdev/html/ODC_JetDatabaseEngineLicensingandSolutionDistribution.asp
Tive no Visual Studio 2005 (versão final) um problema muitas vezes registrado na versão beta: ao fazer o Publish de uma aplicação, o seguinte erro ocorria:
Error 2 SignTool reported an error 'Failed to sign bin\Release\WindowsApplication2.publish\\setup.exe. SignTool Error: Signtool requires CAPICOM version 2.1.0.1 or higher. Please
copy the latest version of CAPICOM.dll into the directory that contains
SignTool.exe. If CAPICOM.dll exists, you may not have proper
permissions to install CAPICOM.
'. WindowsApplication2
Procurei bastante na Internet, encontrei alguns posts em fóruns, mas a maioria estava sem resposta ou com resposta sem a solução.
Como a mensagem de erro é bem explicativa, vi que o erro estava no arquivo CAPICOM.DLL. Fiz o download da versão mais nova do componente (http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&DisplayLang=en), copiei-o para a pasta c:\Windows\System32 e fiz o registro usando Regsvr32.exe "Capicom.dll"
Depois disto, o Publish funcionou corretamente.