| Blog Office VBA | Blog Excel | Blog Access |
O tempo pode ser o nosso aliado quando o fazemos trabalhar para nós. Mas o contrário leva-nos ao sofrimento certo.
Imagine-se num cenário pouco incomum onde uma informação altamente relevante depende do processamento de um relatório que demora vários minutos para rodar. Ahhh, quem já passou por isso sabe como é irritante a repetitiva pergunta que sobrevém aos nossos ouvidos ritmadamente: "Está pronto?", "Já tem o relatório", "Já acabou", sim, isso é de enlouquecer.
Talvez agora mesmo esteja passando por isso. Quem sabe um Dashboard, um Scorecard, ou mesmo um Relatório que demore muito para executar porque as queries conectadas a eles são muito pesadas por serem complexas para processar e a conexão com o banco de dados também esteja comprometida por estar na rede e neste momento a rede esteja sobrecarregada com o acesso contínuo de várias pessoas dos inúmeros departamentos da sua empresa. Creiam-me, sei como é isso: E não adianta tentar explicar todas as implicações anteriores à pessoa que espera as informações salivando no seu cangote.
Este transtorno é comum à inúmeras aplicações MS Access projetadas para um propósito inicial simples, que foi sendo ampliado em tantas e inúmeras direções que fica muito difícil pensar em atualizar toda a sua aplicação.
Bem, o código que estou disponibilizando poderá lhe poupar várias horas de espera. Economizará muito tempo do seu usuário. E, se for bem vendido ao seu superior direto, o manterá no seu emprego (Especialmente se conseguir mensurar quanto tempo poupará em um ano).
Qual é o truque?
Simples:
Transformaremos todas as queries em tabelas.
Como?
Com o uso do código abaixo.
Por quê?
Isso permitirá que os dados sejam processados previamente.
Poderá incluir parâmetros viabilizando a existência de cenários.Insira índices nos campos mais utilizados pelo relatórioAssim quando você ou o seu usuário rodar o Dashboard, o Scorecard ou o Relatório, que foi processado previamente, terá o resultado RAPIDAMENTE.
Segue o código:
' Importa a tabela como snapshot de uma query externa.SUB ImportQry (dbPath, extQry, localName As String)' Faz um Loop através de todas as Tabelas da coleção.Dim tbl As AccessObject, thisDB As ObjectSet thisDB = Application.CurrentDataFor Each tbl In thisDB.AllTables' Caso a tabela local já existir...If tbl.Name = localName Then' se a tabela estiver aberta...If tbl.IsLoaded Then'...Fecha a tabela.DoCmd.Close acTable, localName, acSaveNoEnd If'...deleta a tabela local.DoCmd.DeleteObject acTable, localNameEnd IfNext tbl' A tabela Local foi importada.DoCmd.TransferDatabase acImport, "Microsoft Access", _dbPath, acTable, extQry, localNameEnd Sub
Tags: VBA, Access, Accessing, external, data, Import, table, snapshot, query
Nenhum comentário:
Postar um comentário