Access에서 연결된 테이블을 로컬 테이블로 변환하는 방법

지금 공유 :

이전에 말했지만 반복 할 가치가 있습니다. 연결된 테이블은 여러 가지 이유로 데이터베이스에서 정말 유용 할 수 있습니다. 그러나 연결된 테이블의 한 가지 큰 단점은 성능입니다. 특히 Microsoft Access 테이블이 아닌 경우 (예 : Excel, CSV 또는 DBF 파일). 작업 속도가 매우 느릴 수 있습니다. 이 문제를 해결할 수있는 몇 가지 방법이 있습니다. 여기서 한 가지 방법으로 작업 할 것입니다. 연결된 테이블을 로컬 테이블로 변환하는 것입니다. 물론입니다. 테이블을 복사 / 붙여 넣기하여 수동으로이 작업을 수행 할 수 있지만 처리 할 작업이 많으면 코드에서 수행하는 것이 훨씬 더 쉽습니다. 방법을 살펴 보겠습니다.

요구 사항을 요약하는 것이 중요한 이유

연결된 테이블에 액세스먼저 코드가 실제로 수행 할 작업을 간략하게 설명하겠습니다. 이렇게하면 처음부터 실제로 코드를 생성하는 것이 훨씬 쉬워 지므로 VBA 코드를 생성 할 때마다이 작업을 수행하는 것이 좋습니다. , 목표를 명확히하는 데 도움이됩니다.

"연결된 테이블의 이름이 주어지면 해당 테이블을 로컬 테이블로 데이터베이스로 가져와 성능을 향상시킵니다. 선택적으로 동시에 데이터베이스에서 링크를 삭제합니다."

일반적으로 연결된 테이블을 로컬 테이블로 변환 할 때 링크를 삭제하고 싶지만 아래 코드 샘플에서는 원래 연결된 파일도 유지할 수있는 옵션을 제공했지만 이렇게하면 새로 가져온 테이블은 쿼리 등에서 연결된 테이블을 대체하지 않으므로 로컬 테이블이 제공하는 성능 향상을 볼 수 없습니다. 코드가 필요에 따라 작동한다는 것이 마음에 들면 항상 원본을 삭제하는 것이 좋습니다. 결국 실제 테이블을 삭제하는 것이 아니라 테이블에 대한 링크 만 삭제하는 것입니다.

주의의 단어

코드를 작성하기 전에 – 잠시주의를 기울이십시오. 링크를 사용하는 경우 할 수있는 일이 많지 않습니다. 손상된 Access 데이터베이스 – Access가 파일을 읽을 수없는 경우 파일을 가져올 가능성이 거의 없습니다.

그래서 – 코드에 대해…

Sub MakeTableLocal(tableName As String, optional deleteOriginal As Boolean = True)
    Dim DbPath As Variant, TblName As Variant

    'get path of linked table
    DbPath = DLookup("Database", "MSysObjects", "Name='" & tableName & "' And Type=6")
    'Get the real name of the linked table (in case it has been given an alias in the link)
    TblName = DLookup("ForeignName", "MSysObjects", "Name='" & tableName & "' And Type=6")
    If IsNull(DbPath) Then
        'Either a local table, or the wrong table name has been supplied, exit the sub
        Exit Sub
    End If

    'delete linked table
    If deleteOriginal Then
        DoCmd.DeleteObject acTable, tableName
    Else
        'If we're not deleting the existing table we'll have to rename the imported table to avoid
        'overwriting it etc
        tableName = tableName & " - local"
    End If
    
    'import the table as a local, unlinked table
    DoCmd.TransferDatabase acImport, "Microsoft Access", DbPath, acTable, TblName, tableName
End Sub

코드가하는 일

VBA 코드Most 코드의 내용은 매우 분명하지만 주목할 몇 가지 핵심 사항이 있습니다. 먼저, 일반적으로 숨겨져있는 Access 시스템 테이블“MSysObjects”를 살펴봄으로써 어떤 파일이 링크되고 있는지에 대한 세부 정보를 얻습니다. 연결된 테이블에 새로운 로컬 별칭을 부여하는 것이 완벽하게 가능하고 가능성이 있으므로 다음으로해야 할 일은 "MSysObjects"테이블에서 원래 테이블의 이름을 가져 오는 것입니다.

이제 해당 세부 정보가 유효하기 만하면 (예 : 루틴에 틀린 테이블 이름을 제공하지 않은 경우) 링크를 삭제하면됩니다. deleteOriginal이 True로 설정 됨) 테이블을 가져옵니다.

이렇게하면 성능이 상당히 크게 향상되는 경우가 많으므로 연결된 테이블을 사용하는 경우 해당 테이블을 로컬 버전으로 이동하면 얻을 수있는 이점을 확인하는 것이 좋습니다. 놀랄 수도 있습니다.

저자 소개 :

Mitchell Pond는 데이터 복구 전문가입니다. DataNumen, Inc.는 다음과 같은 데이터 복구 기술 분야의 세계적 리더입니다. 수리 SQL Server 파일 그리고 엑셀 복구 소프트웨어 제품. 자세한 내용은 WWW.datanumen.COM

지금 공유 :

댓글이 닫혀있다.