Já dissemos isso antes, mas vale a pena repetir – tabelas vinculadas podem ser realmente úteis em seus bancos de dados por vários motivos. Mas uma grande desvantagem das tabelas vinculadas é o desempenho - executar consultas nelas, especialmente se não forem tabelas do Microsoft Access (ou seja, se forem Excel, CSV ou DBF arquivos). Eles podem ser dolorosamente lentos para trabalhar. Existem algumas maneiras de contornar isso – vamos trabalhar com uma maneira aqui, que é converter uma tabela vinculada em uma tabela local. Claro – você pode fazer isso manualmente copiando/colando tabelas, mas se você tiver muito o que lidar, fazer isso no código é muito, muito mais fácil, então vamos ver como…
Por que definir suas necessidades é importante
Em primeiro lugar, vamos descrever o que realmente queremos que o código faça - fazer isso torna muito mais fácil criar o código em primeiro lugar, então sugiro que você faça isso toda vez que estiver pensando em criar algum código VBA , ajuda a esclarecer seu objetivo:
“Dado o nome de uma tabela vinculada, importe essa tabela para o banco de dados como uma tabela local para melhorar o desempenho – opcionalmente, exclua o link do banco de dados ao mesmo tempo”
Normalmente, ao converter uma tabela vinculada em uma tabela local, você deseja excluir o link, mas no exemplo de código abaixo, oferecemos a opção de manter o arquivo vinculado original também, mas, ao fazer isso, seu a tabela recém-importada não substituirá sua tabela vinculada em suas consultas, etc., portanto, você não verá o ganho de desempenho que uma tabela local lhe daria. Uma vez que você esteja certo de que o código está funcionando conforme necessário, recomendamos sempre excluir o original – afinal, você não está realmente excluindo a tabela real, apenas o link para ela.
Uma palavra de cautela
Antes de chegarmos ao código - apenas uma palavra rápida de cautela, não há muito que você possa fazer se estiver vinculando a um banco de dados Access danificado – se o Access não conseguir ler o arquivo, é altamente improvável que consiga importar dele.
Então - para o código ...
Sub MakeTableLocal(tableName As String, opcional deleteOriginal As Boolean = True) Dim DbPath As Variant, TblName As Variant 'obter caminho da tabela vinculada DbPath = DLookup("Database", "MSysObjects", "Name='" & tableName & "' And Type=6") 'Obtém o nome real da tabela vinculada (caso tenha recebido um alias no link) TblName = DLookup("ForeignName", "MSysObjects", "Name='" & tableName & "' And Type=6") If IsNull(DbPath) Then 'Uma tabela local ou o nome de tabela errado foi fornecido, saia do sub Exit Sub End If 'excluir tabela vinculada If deleteOriginal Then DoCmd.DeleteObject acTable, tableName Else 'If não estamos excluindo a tabela existente, teremos que renomear a tabela importada para evitar 'substituí-la etc tableName = tableName & " - local" End If 'importar a tabela como uma tabela local e não vinculada DoCmd.TransferDatabase acImport, "Microsoft Access", DbPath, acTable, TblName, tableName End Sub
O que o código está fazendo
Most do código será bastante óbvio, mas há alguns pontos-chave a serem observados. Em primeiro lugar, obtemos os detalhes de qual arquivo está sendo vinculado, observando a tabela do sistema Access (geralmente oculta) “MSysObjects”. Como é perfeitamente possível (e provável) que você tenha dado à tabela vinculada um novo alias local, a próxima coisa que precisamos fazer é obter o nome da tabela original – novamente, da tabela “MSysObjects”.
Agora que temos esses detalhes, contanto que sejam válidos (ou seja, você não forneceu um nome de tabela incorreto para a rotina), estamos prontos para continuar, então é simplesmente uma questão de a) excluir o link (se deleteOriginal está definido como True) e importar a tabela.
Fazer isso geralmente oferece melhorias dramáticas no desempenho, portanto, se você estiver usando tabelas vinculadas, recomendo que verifique quais ganhos a movimentação dessas tabelas para versões locais oferece - você pode se surpreender!
Introdução do autor:
Mitchell Pond é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo reparar SQL Server lima e produtos de software de recuperação do Excel. Para mais informações visite www.datanumen.com
Deixe um comentário