วิธีการแปลงตารางที่เชื่อมโยงเป็นตารางท้องถิ่นในการเข้าถึงของคุณ

แบ่งปันเลย:

เราเคยพูดไว้ก่อนหน้านี้แล้ว แต่ควรทำซ้ำตารางที่เชื่อมโยงจะมีประโยชน์อย่างมากในฐานข้อมูลของคุณด้วยเหตุผลหลายประการ แต่ข้อเสียเปรียบประการใหญ่ประการหนึ่งของตารางที่เชื่อมโยงคือประสิทธิภาพ - การเรียกใช้แบบสอบถามกับตารางเหล่านี้โดยเฉพาะอย่างยิ่งถ้าไม่ใช่ตาราง 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

โค้ดกำลังทำอะไรอยู่

รหัส VBAMost ของโค้ดจะค่อนข้างชัดเจน แต่มีประเด็นสำคัญที่ควรทราบ ประการแรกเราจะได้รับรายละเอียดของไฟล์ที่กำลังเชื่อมโยงโดยดูในตารางระบบ Access (มักจะซ่อนอยู่)“ MSysObjects” เนื่องจากเป็นไปได้อย่างสมบูรณ์แบบ (และเป็นไปได้) ที่คุณจะกำหนดนามแฝงท้องถิ่นใหม่ให้กับตารางที่เชื่อมโยงสิ่งต่อไปที่เราต้องทำคือรับชื่อของตารางเดิม - อีกครั้งจากตาราง“ MSysObjects”

ตอนนี้เรามีรายละเอียดเหล่านั้นแล้วตราบเท่าที่ถูกต้อง (เช่นคุณไม่ได้ระบุชื่อตารางที่สะกดผิดให้กับกิจวัตร) เราก็พร้อมที่จะไปดังนั้นมันเป็นเพียงเรื่องของก) การลบลิงค์ deleteOriginal ถูกตั้งค่าเป็น True) และนำเข้าตาราง

การทำเช่นนี้มักจะทำให้คุณได้รับการปรับปรุงประสิทธิภาพอย่างมากดังนั้นหากคุณใช้ตารางที่เชื่อมโยงกันฉันขอแนะนำให้คุณตรวจสอบสิ่งที่ได้รับจากการย้ายตารางเหล่านั้นไปยังเวอร์ชันท้องถิ่นซึ่งจะทำให้คุณได้ซึ่งคุณอาจแปลกใจ!

บทนำผู้เขียน:

Mitchell Pond เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ ซ่อมแซม SQL Server ไฟล์ และผลิตภัณฑ์ซอฟต์แวร์กู้คืน excel ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.

แบ่งปันเลย:

ความเห็นถูกปิด