VBA Error 3275 - Unexpected error from external database driver

Pois é, erros e mais erros... Conforme já tive chance de escrever aqui antes, invariavelmente somos expostos a erros quando estamos desenvolvendo soluções através das nossas aplicações, não raramente acompanhadas de uma demanda alta e com pouco tempo. Especialmente quando envolve o inter-relacionamento entre aplicações distintas, neste caso utilizo o MS Office 2007. As interações podem ocorrer entre o MS Access e o MS Excel, numa constante troca de dados, com a criação de diversas planilhas repletas de fórmulas, ou mesmo a exportação de diversos painéis de dados (como um Dashboard) para apresentações MS PowerPoint dentro de um ciclo contínuo. No cenário descrito acima é muito provável que nos deparemos com o famoso, pouco conhecido, mas muiiitooo chato: Erro 3275. Este erro, quando pesquisado na literatura Microsoftniana, está acompanhado da seguinte definição: Unexpected error from external database driver <error number>, ou, Erro inexperado causado pelo driver de banco de dados externo <número do erro> Este erro torna-se ainda mais comum durante a execução repetitiva da seguinte linha de comando: DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, nquery, PlanTarget
Pode percebê-lo melhor dentro da funcionalidade abaixo, a qual é evocada dentro de um ciclo constante. Function Qualquer     ' 1ª FASE - Copia a planilha enviada como referência.     ' ----------------------------------------------------------------------------------------     Set objExcel = CreateObject("Excel.Application")     Set objWorkBook = objExcel.Workbooks.Open(PlanBase)     ' Salva planilha com o nome temporário.     objExcel.Workbooks(1).SaveAs (PlanTarget)     objExcel.Quit         ' Cria Query tmp, base da planilha.     Set Cria_Query = CurrentDb.CreateQueryDef(nquery, strSQL)     Call Sleep(2000)  ' Pausa para o sistema operacional não fundir...     Debug.Print Right(Now(), 8), nquery, strSQL, PlanTarget     ' Insere planilha com dados.     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, nquery, PlanTarget     ' Delete a query temp     DoCmd.DeleteObject acQuery, nquery     ' Final - Limpa as variáveis.     ' ----------------------------------------------------------------------------------------     Set Cria_Query_PXBR = Nothing     Set objWorkBook = Nothing     Set objExcel = Nothing End Function Certamente percebeu a ocorrência da função Sleep() no trecho de código colado aí acima. Este foi implementado com o único propósito de 'atrasar' a funcionalidade para que esta possa ter tempo de exportar os dados para a planilha e em seguida dar continuidade ao processo. Percebi, pelo menos neste meu problema, que a interação entre as aplicações necessita de um tempo para o processamento completo, o qual envolve: - Busca dos dados dentro da base; - Exportação destes dados para uma planilha, que tem como base um modelo; - Adequação dos dados nesta planilha modelo. Ao passo que o MS Access executava suas funcionalidade de uma forma rápida, o mesmo não ocorria com MS Excel que ficava 'agarrado' no seu processamento de forma mais lenta (letárgica diria). Para tanto, precisei dar um sossega leão no MS Access, utilizando a função Sleep(). Call Sleep(4000)  ' Pausa para o sistema operacional não fundir...
Pode ser que necessite dessa funcionalidade em outros aspectos, por isso te passo o modo como resolvi aqui nesta Sleep(), mas poderá fazer de outro modo:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Seria muito legal, caso já tenha se deparado com este problema, que o comentasse, e como fez para resolvê-lo. Desse modo criaremos um repositório para elucidar aqueles que forem atacados pelo mesmo inconveniente Erro 3275.
 
Twitter: @officespecialis              @brzexceldevelop              @brzaccessdevel

Nenhum comentário:

Postar um comentário

diHITT - Notícias