ليس الأمر صعبا إذا تم الدخول عليه من بابه!
إعادة ربط الجداول المرتبطة له مكون يخصه في قاعدة البيانات. هذا المكون له خصائص يمكن أعادة تخصيصها من قبل مطور قواعد البيانات.. إليك الطريقة..
.. المكون هو [TableDef] يعيد هذا المكون مصفوفة بجداول البيانات المرتبطة وغير المرتبة بما فيها جداول النظام.
.. هذه الجداول لها عدة خصائص منها خصيصة أتصال الجدول بقاعدة البيانات؛ إذا كان الجدول مضمناً في قاعدة البيانات فإن هذه القيمة تكون خاليه، أما إذا كان مرتبطا فإنها تعود بقيمة نصية تمثل نوع الجدول واسمه ومساره.
هذه القيمة يمكن إعادة تخصيصها.
.. إذا قلنا أن [TableDef] يعيد مصفوفة بالجداول فنحن إذا بحاجة دوارة غرضية تعيد جميع الجداول لفحصها هل هي مرتبطة أم لا؟
.. إذا كانت مرتبطة.. هل الرابط سليم أم معطوب؟
.. إذا كان معطوبا.. هل يمكن إصلاحه تلقائيا أم يحتاج إلى تدخل من قبل المستخدم؟
__ إشكالية!!
هل مصدر البيانات واحد أو متعدد؟ وهل هو من نوع واحد أو متعدد؟
__ للمعلومية
يقوم أكسس بتخزين خصائص هذا المكون، والمكونات الأخرى في جدول من جداول النظام يسمى [MSysObjects] وهذا يعني أن القيم التي يُعاد تخصيصها تبقى ثابته.
__ لطيفة
إذا كان مصدر البيانات موحدا فيمكن فحص قيمة الاتصال باستخدام الوظيقة [DLookup] لإعادة أول سجل يحمل اسم ومسار قاعدة البيانات للجداول المرتبطة؛ ومن ثم نمرر الناتج على التابع [Dir] هذا التابع يعيد اسم الملف إذا المسار إليه صحيحا ويعيد قيمة خالية إذا كان معطوبا!
__ التطبيق
.. أليك طرف الخيط
Sub LINK_TABLE(Optional LINK_DIR As String)
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Set dbs = CurrentDb()
If Not Len(LINK_DIR) Then
LINK_DIR = XDEF_PATH
End If
'-- Loop through TableDefs collection, only processing _
'-- the table if it already has a Connection property. _
'-- (all other tables are local ... not linked)
For Each tdf In dbs.TableDefs
If tdf.Connect <> "" Then
LD = Mid(tdf.Connect, InStr(tdf.Connect, "\DATA"))
tdf.Connect = ";DATABASE=" & LINK_DIR & LD
tdf.RefreshLink
End If
Next
End Sub