Como evitar a sobrecarga da base de dados depois de utilizar Objetos de Acesso a Dados (DAO)
Moderado: requer competências básicas de macro, codificação e interoperabilidade.
Este artigo aplica-se apenas a uma base de dados do Microsoft Access (.mdb).
Sintomas
Uma base de dados do Microsoft Access começou a aumentar (ou a crescer rapidamente) depois de implementar Objetos de Acesso a Dados (DAO) para abrir um conjunto de registos.
Causa
Se não libertar a memória de um conjunto de registos sempre que percorrer o código do conjunto de registos, o DAO poderá recompilar, utilizando mais memória e aumentando o tamanho da base de dados.
Resolução
Para evitar consumir recursos desnecessários e aumentar o tamanho da base de dados, utilize o método Fechar do objeto Conjunto de registos para fechar explicitamente a memória do conjunto de registos quando já não precisar do conjunto de registos.
Se a base de dados tiver aumentado de tamanho porque não utilizou o método Fechar do objeto Conjunto de registos, pode reduzir o tamanho da base de dados ao executar o utilitário Compactar e Reparar (no menu Ferramentas).
Mais informações
Quando criar um objeto Conjunto de Registos (ou um QueryDef) no código, feche explicitamente o objeto quando tiver terminado. O Microsoft Access fecha automaticamente objetos Recordset e QueryDef na maioria das circunstâncias. No entanto, se fechar explicitamente o objeto no código, pode evitar instâncias ocasionais quando o objeto permanecer aberto. Os passos seguintes mostram-lhe como utilizar o DAO para fechar um objeto Conjunto de registos ou QueryDef.
Inicie o Microsoft Access.
Abra a base de dados de exemplo Northwind.mdb.
NOTA O código de exemplo neste artigo utiliza Objetos do Microsoft Data Access. Para que este código seja executado corretamente, tem de referenciar a Biblioteca de Objetos do Microsoft DAO 3.6. Para tal, clique em Referências no menu Ferramentas no Visual Basic Revisor e certifique-se de que a caixa de verificação Biblioteca de Objetos do Microsoft DAO 3.6 está selecionada.
Copie o seguinte código para um novo módulo. O código de exemplo seguinte abre e fecha um conjunto de registos e um objeto QueryDef e apresenta as informações do Conjunto de registos e do QueryDef nas caixas de mensagens.
Option Compare Database Option Explicit Sub subCloseObjects() Dim db As DAO.Database Dim rs As DAO.Recordset Dim qd As DAO.QueryDef Set db = CurrentDb Set rs = db.OpenRecordset("Employees", dbOpenTable) Set qd = db.QueryDefs("Invoices") rs.MoveLast 'Move to the last record in the Recordset. MsgBox "The Employees Recordset is open." & vbCrLf & _ "The last Employee ID is " & rs![EmployeeID] & "." MsgBox "The Invoices query definition is open." & vbCrLf & _ "The first field in the query is " & qd.Fields(0).Name 'Explicitly close the Recordset and QueryDef objects. rs.Close qd.Close End Sub
Execute a rotina subCloseObjects.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários