الحلقة الخامسة
كائنات الوصول للبيانات Data Access Object ( DAO)
تحدثنا أن هناك ثلاث أدوات تستخدم لربط قاعدة البيانات المنشأة بأحد برامج قواعد البيانات مثل برنامج ميكروسوفت أكسس وقلنا أن هناك ثلاث أدوات ولكل أداة من هذه الأدوات يمكن استخدام كائن من الكائنات بدلا من الأداة الرسوميه وهي موجودة بالجدول التاليللتعامل مع قواعد البيانات في الفيجوال بيسك يتم ذلك بطريقتين

ولقد قمنا بشرح الأداة Data Control في الحلقة السابقة حيث يمكنك استخدام أكثر من أداة واحدة داخل النموذج الواحد للربط مع أكثر من جدول وسنقوم في هذه الحلقة بشرح الكائن المقابل لهذه الأداة وهو كائن الوصول للبيانات DAO .
الكائن Object هو صنف له مجموعة من الخصائص والطرق والأحداث لتأدية غرض معين وكائن الوصول لقاعدة البيانات DAO هو الرابط بين برنامج الفيجوال بيسك وبرنامج قواعد البيانات حيث يشبه الوصول للبيانات بالشكل التالي :

حيث يمثل (ODBC) Open Database Connectivity عنصر الاتصال مع قاعدة البيانات والذي يسمى الاتصال المفتوح مع قاعدة البيانات وهو بداخلة مجموعة من الكائنات يقع في أعلاها الكائن DAO و RDO اللذان يستخدمان المحرك ODBC للوصول للبيانات وهناك مجموعة أخرى من الكائنات سوف نتعرض لها عند الشرح .
وأدخل معي الى عالم البرمجة الحقيقة حيث كل شيء ميسر هنا ولكن يبقي الابتكار
خطوات التعامل مع الكائنات DAO
الخطوة الأولى
تعريف الكائنات في مرجع البرنامج References وهنا يجب التفريق بين Component وهو المكان الذي تضيف منه أدوات جديدة أما References هو المكان الذي تضيف منه كائنات جديدة ولإضافة الكائنات نقوم بالخطوات التالية
1 - اضغط قائمة PROJECT واختار REFRANCES
2 - من الشاشة التي تظهر أختار الكائن MICROSOFT DAO 3.51 OBJECT LIBRARY أو حسب آخر إصدار موجود عندك

الخطوة الثانية
إنشاء قاعدة البيانات حيث يمكنك إنشاء قاعدة البيانات والجداول باستخدام الكود أو باستخدام برنامج مخصص لقاعدة البيانات ( المفضل )
الخطوة الثالثة
في شاشة محرر الكود للنموذج وفي منطقة تعريف المتغيرات للنموذج ( أعلى النموذج ) يتم تعريف المتغيرات التي تعبر عن كائنات قاعدة البيانات كالتالي :
CODE
CODE: |
0001
0002
0003
0004
|
Dim WS As DAO.Workspace تعريف متغير يعبر عن منطقة العمل
Dim DB As DAO.Databaseتعريف متغير يعبر عن كائن قاعدة البيانات
Dim RS As DAO.Recordset تعريف متغير يعبر عن كائن مجموعة السجلات
|
طبعا معروف أن المتغير إذا كنت ستستخدمه داخل المشروع بالكامل فيفضل إنشاء ملف برمجة Module وتضع فيه المتغيرات وهذا ما أفضله أن تضع منطقة العمل وقاعدة البيانات في ملف برمجة
الخطوة الرابعة
وهنا يجب أن نعرف أنه في قواعد البيانات يفضل أن تكتب كود فتح قاعدة البيانات مرة واحدة في حدث Form load للشاشة الرئيسية للبرنامج وهي الشاشة التي تعتبر الحاوية لكل شاشات البرنامج ولا تغلق إلا عند الخروج من البرنامج أما الجداول فيتم فتحها وإغلاقها حسب الاستخدام .
إنشاء قاعدة البيانات والجداول باستخدام الكود
إذا كنت ترغب في إنشاء قاعدة البيانات وإنشاء الجداول باستخدام الكود فيتم
1 - تعريف الكائنات التالية في نفس الموضع السابق
CODE
CODE: |
0001
0002
0003
0004
|
Dim TBL1 As TableDef تعريف متغير يعبر عن كائن الجداول ( الجدول الأول )
Dim TBL2 As TableDef تعريف متغير يعبر عن كائن الجداول ( الجدول الثاني )
Dim f1, f2, f3, f4, f5, f6 As Field تعريف متغير يعبر عن حقول الجدول الأول
Dim ff1, ff2, ff3, ff4, ff5, ff6 As Field تعريف متغير يعبر عن حقول الجدول الثاني |
2 - اضغط على زر إنشاء قاعدة البيانات ثم أكتب الكود التالي :
CODE
CODE: |
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
|
Dim a, r
Dim s As String
s = App.Path & \"\\" & \"students.mdb\" '
Set ws = DBEngine.Workspaces(0)
a = Dir(s) 'للبحث عن ملف قاعدة البيانات في مسار معين
If a = \"\" Then 'الملف غير موجود
Set db = ws.CreateDatabase(s, dbLangGeneral) 'إنشاء قاعدة البيانات
Else
r = MsgBox(\"قاعدة البيانات موجودة هل تريد استبدالها\", vbYesNo, \"استبدال\")
If r = vbYes Then
Kill (s) 'حذف قاعدة البيانات
Set db = ws.CreateDatabase(s, dbLangGeneral) 'أعادة الإنشاء
Else
Exit Sub
End If
End If |
ملاحظات على الكود السابق
1 - جملة App.Path ترجع بمسار الملف وفي هذه الحالة يفضل وضع ملف قاعدة البيانات في نفس مجلد البرنامج
2 - جملة DBEngine وهو محرك قاعدة البيانات الخاص بقادة البيانات اكسس
3 - جملة CreateDatabase تنشأ قاعدة البيانات الجديدة والجملة تكتب على الشكل
CODE
CODE: |
0001
|
Set database = workspace.CreateDatabase (name, locale, options) |
Name : اسم ومسار قاعدة البيانات
Local : لغة قاعدة البيانات
Option : مجموعة من الإختيارات مثل التشفير وأصدارقاعدة البيانات ....
4 - جملة Dir(path) للبحث عن ملف لمسار معين
5 - حملة kill(path) لحذف ملف من خلال مسار معين .
إنشاء الجداول باستخدام الكود
يتم إنشاء الجداول باستخدام الكود حيث نحتاج في بعض الأحيان إلى إنشاء جدول إثناء التنفيذ فيتم كما يلي .... اضغط على الزر إنشاء الجداول
CODE
CODE: |
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
|
Dim s As String
s = App.Path & \"\\" & \"students.mdb\"
Set ws = DBEngine.Workspaces(0)
Set db = ws1.OpenDatabase(s)
Set tbl1 = db.CreateTableDef(\"st_inf\")
Set f1 = tbl1.CreateField(\"st_no\", dbInteger)
Set f2 = tbl1.CreateField(\"st_name\", dbText, 40)
Set f3 = tbl1.CreateField(\"address\", dbText, 40)
Set f4 = tbl1.CreateField(\"phone\", dbText, 40)
Set f5 = tbl1.CreateField(\"b_date\", dbDate)
tbl1.Fields.Append f1
tbl1.Fields.Append f2
tbl1.Fields.Append f3
tbl1.Fields.Append f4
tbl1.Fields.Append f5
db1.TableDefs.Append tbl1 |
حيث يتم فتح قاعدة البيانات التي تم إنشائها ثم إنشاء الجداول وإنشاء الحقول بإضافة اسم الحقل ونوع البيانات وحجم الحقل ثم إضافة الحقول إلى الجدول ولإضافة الجدول إلى قاعدة البيانات بعد ذلك .
التعامل مع قاعدة البيانات التي تم إنشائها
1 - في الحدث Form Load للنموذج يتم فتح قاعدة البيانات والجداول المراد استخدامها داخل النموذج
ويفضل إنشاء ملف برمجة حيث تعرف فيه متغير قاعدة البيانات ومتغير مجموعة العمل حتى يمكنك استخدامها داخل البرنامج بالكامل دون تعريفها في كل نموذج ويتم فتح قاعدة البيانات في حدث التحميل للشاشة الرئيسية للبرنامج كالتالي :
اضغط على مكان خالي بالنموذج مرتين ثم اكتب الكود التالي
CODE
CODE: |
0001
0002
0003
|
Dim s as string
S = app.path & \"\students.mdb\" هذا المتغير يعبر عن مسار قاعدة البيانات المراد فتحها
Set db = OpenDatabase(S) هذه الجملة لفتح قاعدة البيانات |
2 - بعد ذلك افتح الجدول المطلوب في كل شاشة من شاشات البرنامج يتم تعريف متغير للتعبير عن الجدول عند التعامل معه مثل RS حيث يوضع التعريف التالي في منطقة تعريف المتغيرات في النموذج
Dim RS as DAO.Recorset
ثم بعد ذلك يتم فتح الجدول في أي مكان نريد استخدامه
CODE
CODE: |
0001
0002
|
Set rs = db.OpenRecordset(\"st_info\", dbOpenDynaset)
|
حيث أن جملة OpenRecordset لها بارامترين
الأول : يحدد اسم الجدول المطلوب فتحة
الثاني نوع السجلات التي ستستخدمها
أنواع السجلات التي يمكن فتحها بالكائن DAO
النوع الأول Table Recordset
وهذا النوع هو ارتباط مباشر لأي جدول في قاعدة البيانات
مميزاته
1 - استخدام نظام الفهرسة INDEX
2 - إتاحة عمليات بحث سريعة
عيوبه
1 - عدم إمكانية إنشاء تصفية للسجلات
2 - استخدام تعليمة SEEK في البحث وهى تبحث عن السجل الأول فقط
3 - عدم استخدام تعليمة البحث FIND التي يمكن أن توجد عدد كبير من السجلات
ولفتح جدول باستخدام هذا النوع نستخدم الجملة التالية
CODE
CODE: |
0001
0002
|
Set rs = db.OpenRecordset(\"st_info\", dbOpenTable)
|
النوع الثاني DyanaSet Recordset
وهو عبارة عن مجموعة من السجلات من جدول واحد أو أكثر في قاعدة البيانات
مميزاته
1 - إمكانية ربط البيانات في أكثر من جدول
2 - إمكانية استخدام الأمر FIND في البحث عن السجلات
3 - إمكانية عمل تصفية للسجلات
عيوبه
1 - لا يستخدم الفهارس INDEX
2 - لا يتيح تعديل السجلات أو حذفها بسهولة
لفتح جدول باستخدام هذا النوع من السجلات نستخدم الجملة التالية
CODE
CODE: |
0001
0002
|
Set rs = db.OpenRecordset(\"st_info\", dbOpenDynaset)
|
النوع الثالث : SnapShot Recordset
وهى عبارة عن صورة من الجدول كما هو وهي للقراءة فقط
مميزاته
1 - إمكانية ربط أكثر من جدول
2 - إمكانية استخدام أمر البحث FIND
3 - سرعة البحث للسجلات لأنها في الذاكرة
عيوبه
1 - عدم إمكانية تحديث وتعديل البيانات لأنها للقراءة فقط
2 - عدم إمكانية استخدام الفهارس
3 - استهلاك الذاكرة وخاصة عند فتح أكثر من جدول
لفتح جدول باستخدام هذا النوع من السجلات نستخدم الجملة التالية
CODE
CODE: |
0001
0002
|
Set rs = db.OpenRecordset(\"st_info\", dbOpenSnapShot)
|
|