DAO(데이터 액세스 개체)를 사용한 후 데이터베이스가 부풀어 오르지 않도록 방지하는 방법

보통: 기본 매크로, 코딩 및 상호 운용성 기술이 필요합니다.

이 문서는 Microsoft Access 데이터베이스(.mdb)에만 적용됩니다.

증상

레코드 집합을 열기 위해 DAO(데이터 액세스 개체)를 구현한 후 Microsoft Access 데이터베이스가 부풀어 오르거나 크기가 빠르게 증가하기 시작했습니다.

원인

레코드 집합 코드를 반복할 때마다 레코드 집합의 메모리를 해제하지 않으면 DAO가 다시 컴파일되어 더 많은 메모리를 사용하고 데이터베이스 크기를 늘릴 수 있습니다.

해결 방법

불필요한 리소스를 사용하고 데이터베이스 크기를 늘리지 않도록 하려면 Recordset 개체의 Close 메서드를 사용하여 레코드 집합이 더 이상 필요하지 않을 때 레코드 집합의 메모리를 명시적으로 닫습니다.

Recordset 개체의 Close 메서드를 사용하지 않아 데이터베이스 크기가 증가한 경우 도구 메뉴의 Compact and Repair 유틸리티를 실행하여 데이터베이스 크기를 줄일 수 있습니다.

추가 정보

코드에서 Recordset(또는 QueryDef) 개체를 만들 때 완료되면 개체를 명시적으로 닫습니다. Microsoft Access는 대부분의 상황에서 Recordset 및 QueryDef 개체를 자동으로 닫습니다. 그러나 코드에서 개체를 명시적으로 닫으면 개체가 열린 상태로 유지되는 경우 가끔 인스턴스를 방지할 수 있습니다. 다음 단계에서는 DAO를 사용하여 Recordset 또는 QueryDef 개체를 닫는 방법을 보여줍니다.

  1. Microsoft Access를 시작합니다.

  2. 샘플 데이터베이스 Northwind.mdb 엽니다.

    참고 이 문서의 샘플 코드는 Microsoft 데이터 액세스 개체를 사용합니다. 이 코드가 제대로 실행되려면 Microsoft DAO 3.6 개체 라이브러리를 참조해야 합니다. 이렇게 하려면 Visual Basic 편집기 도구 메뉴에서 참조를 클릭하고 Microsoft DAO 3.6 개체 라이브러리 검사 상자가 선택되어 있는지 확인합니다.

  3. 다음 코드를 새 모듈에 복사합니다. 다음 샘플 코드는 Recordset 및 QueryDef 개체를 열고 닫고 메시지 상자 내에 Recordset 및 QueryDef 정보를 모두 표시합니다.

    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
    
    
  4. subCloseObjects 루틴을 실행합니다.