เราเคยพูดไว้ก่อนหน้านี้แล้ว แต่ควรทำซ้ำตารางที่เชื่อมโยงจะมีประโยชน์อย่างมากในฐานข้อมูลของคุณด้วยเหตุผลหลายประการ แต่ข้อเสียเปรียบประการใหญ่ประการหนึ่งของตารางที่เชื่อมโยงคือประสิทธิภาพ - การเรียกใช้แบบสอบถามกับตารางเหล่านี้โดยเฉพาะอย่างยิ่งถ้าไม่ใช่ตาราง Microsoft Access (เช่นถ้าเป็น Excel, CSV หรือ DBF ไฟล์) พวกเขาสามารถทำงานได้ช้าลงอย่างเจ็บปวด มีสองสามวิธีที่คุณสามารถแก้ไขได้ - เราจะดำเนินการด้วยวิธีเดียวที่นี่และนั่นคือการแปลงตารางที่เชื่อมโยงเป็นตารางท้องถิ่น แน่นอน - คุณสามารถทำได้ด้วยตนเองโดยการคัดลอก / วางตาราง แต่ถ้าคุณมีสิ่งที่ต้องจัดการมากมายการทำในโค้ดนั้นง่ายกว่ามากดังนั้นมาดูกันว่า ...
เหตุใดการสรุปความต้องการของคุณจึงมีความสำคัญ

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

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