من المعروف ان قواعد البيانات المصممة باستخدام الاكسس تحتوي علي جميع الكائنات من جداول ونماذج وتقارير ووحدات نمطية وماكرو وقد نلجا في بعض الاحيان الي تقسيم قاعدة البيانات الي قاعدتين الاولى تحتوي علي النماذج والتقارير والاستعلامات والوحدات النمطية والماكرو
والقاعدة الثانية تحتوي علي الجداول وفي هذة الحالة لابد من ربط القاعدة الاولي بالثانية
ودائما يتم الربط بطريقة اعتيادية من خلال الذهاب الي قائمة أدوات ثم إحتيار أدوات مساعدة لقواعد البيانات ثم إدارة الجداول المرتبطة
ولتسهيل عملية ربط الجداول كان لابد من ايجاد طريقة أخري يتم من خلالها ربط الجداول تلقائيا بمجرد تشغيل قاعدة البيانات التي تحتوي علي النماذج بمجرد فتح النموذج الرئيسي
ويتم ذلك بإنشاء وحدة نمطية بها الكود التالي
Option Compare Database
Option Explicit
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Function BackFile()
BackFile = CurrentProject.Path & "\sTable_be.mdb"
End Function
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Function CheckFile() As Integer
On Error GoTo Error:
Open BackFile For Input As #1
Close
CheckFile = 1
Exit Function
Error:
Exit Function
End Function
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Function AutoLink()
If CheckFile <> 1 Then
DoCmd.OpenForm "PathFrm"
DoCmd.Close acForm, "sFRM"
GoTo 10
End If
Dim FrontObj As AccessObject, FrontDB As Object
Set FrontDB = Application.CurrentData
For Each FrontObj In FrontDB.AllTables
If Left(FrontObj.Name, 4) <> "MSys" Then
DoCmd.DeleteObject acTable, FrontObj.Name
End If
Next FrontObj
Dim BackObj As TableDef, BackDB As Database
Set BackDB = DBEngine.Workspaces(0).OpenDatabase(BackFile, True, False)
For Each BackObj In BackDB.TableDefs
If Left(BackObj.Name, 4) <> "MSys" Then
DoCmd.TransferDatabase acLink, "Microsoft Access", BackFile, acTable, BackObj.Name, BackObj.Name
End If
Next BackObj
Set FrontDB = Nothing
Set BackDB = Nothing
DoCmd.OpenForm "sFRM"
10:
End Function
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ثم في حدث عند الفتح للنموذج نكتب الكود التالي
Private Sub Form_Load()
If CheckFile = 1 Then
'MsgBox "لم يتغير مكان الجداول"
AutoLink
Else
'MsgBox " تم تغير مكان الجداول", vbInformation
AutoLink
End If
End Sub
والمثال المرفق يوضح عملية الربط التلقائي بدون تحديد المسار حيث يتم البحث عن قاعدة البيانات المطلوبة لربط الجداول اينما كانت
ومرفق مثال لربط قاعدة بيانات بمسار محدد توضع حيث يتم وضع قاعدة البيانات التي تحتوي غلي الجداول في نفس مجلد قاعدة الواجهة
ومثال لربط قاعدة الواجهة باكثر من قاعدة والمثال المرفق لربط الواجهة بقاعدتين ويمكن لك الربط باكثر من ذلك بنفس الطريقة