Como otimizar o Microsoft Access ao utilizar origens de dados ODBC

Avançado: requer codificação especializada, interoperabilidade e competências multiutilizadas.

Este artigo aplica-se apenas a uma base de dados do Microsoft Access (.mdb ou .accdb).

Resumo

Este artigo descreve várias sugestões para melhorar o desempenho quando acede a dados de uma origem de dados ODBC.

Mais informações

Utilize as seguintes sugestões para melhorar o desempenho com origens de dados ODBC:

  • Restrinja a quantidade de dados pedidos do servidor. Não peça mais dados do que o necessário. Utilize consultas para selecionar apenas os campos e linhas de que precisa.

  • Utilize apenas a funcionalidade de que precisa. Os instantâneos são menos potentes do que os dynasets e não são atualizáveis. No entanto, os instantâneos podem ser mais rápidos, especialmente para conjuntos de registos pequenos sem campos Memo ou Objeto OLE.

  • Crie tabelas ligadas (anexadas) para aceder aos dados do servidor. Evite o acesso "direto" ao servidor (ou seja, não abra bases de dados remotas e execute consultas nas mesmas). Em vez disso, crie tabelas anexadas ou crie consultas pass-through.

  • Estruturar caixas de listagem e caixas de combinação sabiamente. Num formulário, cada caixa de listagem, caixa de combinação, subformulário e controlo que contenha um total requer uma consulta separada. Relativamente aos dados locais, o desempenho pode ser adequado. No entanto, em relação aos dados remotos, podem ocorrer atrasos longos quando abre um formulário porque cada consulta tem de ser enviada para o servidor e tem de ser devolvida uma resposta antes de o formulário poder ser aberto.

  • Evite caixas de combinação grandes. Incluir uma caixa de combinação com centenas, ou mesmo milhares, de escolhas baseadas numa tabela local pode gerar um tempo de resposta aceitável, especialmente se definir um índice adequado na tabela local. No entanto, numa tabela remota, essa caixa de combinação produz um desempenho lento porque drena os recursos de servidor e de rede à medida que obtém dados para preencher a lista. É melhor limitar o número de linhas devolvidas à caixa de combinação quando estiver a trabalhar com dados remotos. Também pode dividir os dados em caixas de combinação mais pequenas (tendo em conta a ponta acima).

  • Utilize o comando Localizar apenas em conjuntos de registos mais pequenos. O motor de base de dados do Microsoft Jet otimiza o comando Localizar para funcionar bem com conjuntos de registos locais de quase qualquer tamanho e em conjuntos de registos remotos de tamanho razoável. No entanto, quando tem grandes conjuntos de registos remotos (milhares de registos ou mais), deve criar um filtro ou consulta e ter também o cuidado de utilizar restrições que o servidor pode processar.

  • Certifique-se de que as consultas são enviadas para o servidor para processamento. O fator mais importante no desempenho das consultas em relação aos dados remotos é garantir que o servidor executa o máximo possível da consulta. O motor de base de dados do Microsoft Jet tenta enviar toda a consulta para o servidor, mas avalia localmente quaisquer cláusulas e expressões de consulta que não são geralmente suportadas pelos servidores ou pelo seu servidor específico. A funcionalidade não suportada pelos servidores em geral inclui o seguinte:

  • Operações que não podem ser expressas numa única instrução SQL. Esta situação pode ocorrer quando utiliza uma consulta como entrada para outra consulta ou quando a cláusula FROM da consulta contém uma consulta De totais ou uma consulta DISTINCT. Muitas vezes, pode reorganizar as consultas para calcular os totais após todas as outras operações.

    • Operações que são extensões específicas do motor de base de dados do Microsoft Jet para SQL, tais como consultas cruzadas, consultas TOP e relatórios com vários níveis de agrupamento e totais. Tenha em atenção que as consultas cruzadas simples podem ser enviadas para os servidores.
    • Expressões que contêm funções ou operadores específicos do Microsoft Access. As funções financeiras e os agregados estatísticos do Microsoft Access não têm equivalentes de servidor.
    • Funções do Visual Basic for Application definidas pelo utilizador que assumem colunas remotas como argumentos. Estas funções não existem no servidor, mas têm de processar dados de colunas remotas. No entanto, se uma função definida pelo utilizador devolver um único valor e não fizer referência a uma coluna remota, a função é avaliada localmente e o respetivo valor é enviado para o servidor para processamento.
    • Misturar texto e tipos de dados numéricos em operadores ou saídas de consultas UNION. A maioria dos servidores não tem a clemência do tipo de dados do Microsoft Access. Por este motivo, utilize funções de conversão explícitas, sempre que adequado.
    • Associações heterogéneas entre tabelas locais e tabelas remotas ou entre tabelas remotas em diferentes origens de dados ODBC. As associações entre pequenas tabelas locais e tabelas remotas grandes, onde a coluna de associação é indexada, podem resultar numa associação remota ao índice. Numa associação remota a um índice, é enviada uma consulta para cada linha na tabela local para o servidor e só são devolvidas as linhas de associação.
    • Expressões não remotas ou expressões que não podem ser enviadas remotamente porque não podem ser avaliadas pelo servidor. As expressões de saída não remotas (as da cláusula SELECT) não forçam a avaliação local da consulta, a menos que ocorram numa consulta De totais, numa consulta DISTINCT ou numa consulta UNION. As expressões não remotas noutras cláusulas (WHERE, ORDER BY, GROUP BY, HAVING, etc.) forçam, pelo menos, parte da consulta a ser avaliada localmente.
  • Os servidores diferem em algumas áreas da funcionalidade suportada. Quando anexa uma tabela remota, o motor de base de dados do Microsoft Jet consulta o controlador ODBC quanto às respetivas capacidades. Se a funcionalidade necessária for suportada pelo controlador e pelo servidor, o motor de base de dados do Microsoft Jet envia a operação para o servidor para processamento. Caso contrário, o motor de base de dados do Microsoft Jet executa a operação localmente. As áreas de suporte diferentes incluem (mas não se limitam a) o seguinte:

    • Associações externas. Tenha em atenção que o motor de base de dados do Microsoft Jet não envia várias associações externas para um servidor, embora muitas associações internas possam acompanhar uma única associação externa.
    • Funções numéricas, de cadeia e de data/hora , como Log(), Mid$(), DatePart() e assim sucessivamente.
    • Funções de conversão – como CInt(), CStr(), CVDate() e assim sucessivamente.