شرح برامج » لغات البرمجة » ربط قاعدة البيانات بالكودفي فيجوال بيسك

 ربط قاعدة البيانات بالكودفي فيجوال بيسك  أضيف في: 6-12-1426هـ
بعد أن أخذنا مقدمة عن طريقة الربط بالكود سنأخذ الآن التطبيق الفعلي للربط بالكود ، سيكون مشروعنا عبارة عن برنامج لحفظ اسم السلعة و سعرها ، و كل ما نريده في هذا المثال هو ربط قاعدة البيانات بالكود و حفظ الادراجات الجديدة و الحذف و سنأجل البحث للدروس القادمة عندما نأخذ مباديء SQL لغةالاستعلام حيث سيكون البحث معها في اية السهولة و البساطة و الان دعونا نبدأالدرس


قبل أن تبدأ يجب أن تجهز قاعدة بيانات و ليكن إسمها db1 و تحتوي على جدول اسمه tb1 و هذا الجدول يحتوي على الحقول التالية :


يمكنك عمل قاعدة البيانات بواسطة Access او بواسطة فيجوال بيسك راجع الدرس الثاني

http://up.c-ar.net/541ba.bmp

* بعد أن تقوم بذلك إفتح مشروع فيجوال بيسك قياسي جديد ، و قبل أن تبدأ بربط قاعدة البيانات يجب أن تحدد أي طريقة ستستخدمها للربط و في هذا المثال سنستخدم طريقة او تقنية DAO ، و بعد ان حددنا الطريقة التي سوف تربط بها سنضيف المكتبة الخاصة بها و هي عبارة عن مكتبة تحتوي على تعريف للأوامر التي ستستخدمها لتقنية DAO و لتضيف هذه المكتبة قم بالتالي :


اذهب الى قائمةProject > Refrence و من ثم حدد الاختيار Microsoft DAO 3.51 Object Library بعد ذلك اختر موافق


* الان سنعود لمشروعنا ، و ان كنت مازلت تتذكر ما قلنا في الدرس السابق فإن علينا اضافة موديول ، و لتفعل ذلك اذهب لقائمة Project و اضغط على Add Module الان سنقوم بتعريف متغيرين في الموديول واحد عبارة عن قاعدة بيانات و الاخر عبارة عن جدول و هذه صيغة تعريف المتغيرين :


Public d As Database

Public t As Recordset



كلمة Public تعني انه متغير عام في المشروع و لاحظ ان d اسنادناها كقاعدة بيانات و t كجدول


* في نفس الموديول سنقوم بإسناد قاعدة البيانات الأصلية و التي اسمها db1 الى القاعدة الوهمية ان صح التعبير و التي عرفناها قبل قليل بـ d و لعمل ذلك نكتب الإجراء التالي في الموديول




Private Sub main()

Set d = DBEngine.Workspaces(0).OpenDatabase(App.Path & "db1.mdb")

Form1.Show

End Sub










و الان دعنا نشرح هذا الاجراء ، اول شيء اسمينا هذا الاجراء باسم main و هذا ليس فيه خيار حيث ان هذا اسم محجوز في لغة البيسك فلا تستطيع ان تستبدله بآخر


أول جملة في الاجراء هي جملة الاسناد ولقد بدأناها بأمر الاسناد المعروف Set ثم وضعنا القيمة التي سنسند فيها و هي d التي عرّفناها و قلنا سنسند فيها القاعدة الاصلية لكي لاتتغير قيمها اثناء المعالجة المؤقتة ثم كتبنا كلمة DBEngine و هي عبارة عن نوع قاعدة البيانات التي ستستخدمها و هذا هو محرك قاعدة البيانات من نوع Access ، ثم كتبنا Workspaces(0) و هذا نوع مجال العمل لن نتطرق له الان ، بعد ذلك و ضعنا الامر الذي سيقوم بفتح قاعدة البيانات لكي تستطيع الوصول الى محتواها Opendatabase ، بعد ذلك وضعنا مسار قاعدة البيانات و لكي تتجنب مشكلة تغير المسار من جهاز لاخرنستخدم الدالة App.path اي مسار المحلد الذي يحتوي البرنامج و لاستخدام هذه الطريقة يجب ان تكون قاعدة البيانات في نفس مجلد البرنامج، ثم كتبنا اسم القاعدة و امتدادها


في السطر الثاني من الاجراء كتبنا امر لإظهار الفورم


بإختصار هذه الطريقة ثابته لإسناد اي قاعدة بيانات فقد غير اسم قاعدة البيانات


تنفيذ البرنامج


بعد قيامك بالخطوات السابقة يجب ان تنفذ البرنامج في هذه المرحلة لكي تتأكد انك تسير على الخط الصحيح و قبل ذلك تأكد من انك قمت بجعل الموديول في بدأ التشغيل وذلك بالذهاب الى Project > Project1.proprties.. بعد ذلك حددsub main من القائمة المنسدلة startup object بعد ذلك شغل البرنامج بالضغط على F5 يجب ان تسير الامور على ما يرام و ان لم تكن كذلك تأكد من الخطوات التالية






1- أنك قمت بحفظ المشروع في نفس المجلد الذي فيه قاعدة البيانات

2- أن قاعدة البيانات ليست في قيد التشغيل



3- انك جعلت الموديول في بدأ تشغيل المشروع



4- انك كتبت اسم قاعدة البيانات صحيحا

================

ربط قاعدة البيانات بالكود 2

هذا الجزء الثاني من الدرس السابق فبعد أن تعلمنا نعرف المتغيرات التي سنعمل عليها و ربطنا قاعدة البيانات يبقى امامنا ربط الجدول و اظهار محتويات القاعدة للمستخدم ، اما التنقل بين السجلات و اوامر الحفظ و التعديل و الاضافة فستكون في الجزء الثالث، الان دعونا نبدأ





اولا سنقوم بربط الجدول الذي في قاعدة البيانات و نخزنه في المتغير الذي أنشأناه في الدرس السابق بإسم t علما أن الجدول الرئيسي اسمه tb1 ولكي نقوم بذلك اكتب الامر التالي ف حدث التحميل للفورم load






Private Sub Form_Load()

Set t = d.OpenRecordset("tb1", dbOpenTable)

End Sub





دعنا نشرح الخطوة السابقة بالتفصيل ، اولا وضعنا ربط الجدول في حدث التحميل للفورم ربما تسأل عن السبب و الجواب ان هذا ما يقوم به المحترفون لكي تهيء التعامل مع البيانات عند تحميل الفورم الا اذا كان لديك سبب اخر لتخاف هذه القاعدة


بعذلك و ضعنا جملة الربط للجدول و بدأنا بأمر الاسناد المعروف Set ثم اسم القيمة التي سنسند قيم الجدول فيها و هي التي عرفناها فيما قبل باسم t بعد ذلك نكتب اسم القاعدة المستعار الذي اسندنا القاعدة الاصلية فيه و هو d ثم نكتب الامر الذي سيفتح لنا الجدول لكي نستطيع الوصول الى محتواه و هو Openrecordset بعد ذلك نكتب اسم الجدول الحقيقي بين علامتي تنصيص و نكتب نوع الرط وهو dbopentable استخدم هذه الطريقة فقط و لا تسأل لماذا لانها من الاوامر الثابته و من انواع الربط و ستستطيع التفريق بين انواع الربط في المستقبل مع كثرة التمارين فلا تستعجل ، هكذا تكون قد قمت بربط قاعدة البيانات و الجدول بواسطة الكود ،،،، مبروك





و الان سنتعرف على كيفية اظهار البيانات للمستخدم ، و قبل ذلك قم بتصميم و اجهة المستخدم ووضع مربعات النص العناوين كما في الصورة التالية و قد وضحت على الصورة التسميات التي سنعتمدها :

http://www.c4arab.com/images/lessons/databases/pic/c6f1.gif

Private Sub showdata()

If t.RecordCount < 1 Then Exit Sub ' عندما يكون الجدول فارغ اخرج من الاجراء

Text1.Text = t!Name 'نضع في مربع النص الاول قيمة حقل الاسم في الجدولt

Text2.Text = t!num ' نفس الخطوة السابقة لحقل رقم السلعة

Text3.Text = t!price 'نفس الخطة السابقة لحقل السعر

End Sub




الان دعنا نلقي نظرة على اجراء اظهار البيانات بدأنا اولا بالتأكد اذا كان الجدول يحتوي على بيانات ام لا فإذا كان لا يحتوي فنخرج من الاجراء لكي لا يحدث مشاكل اثناء العرض


بعد ذلك نقوم بإظهار قيمة ما في الحقول في مربعات النص ، و لاحظ أننا استخدمنا علامة التعجب ! لكي تفصل بين اسم الجدول المستعار و اسم الحقل ، يجب أن تفرق بين اسم الدول او القاعدة المستعار و الاصلي و متى نستخدم كل منهما


و الان يجب أن نضيف امر استدعاء لإجراء العرض عند تحميل البرنامج فسيكون الامر في حدث التحميل هكذا :



Private Sub Form_Load()

Set t = d.OpenRecordset("tb1", dbOpenTable)

Call showdata

End Sub


=====

ربط قاعدة البيانات بالكود 3

في هذا الجزء الثالث و الاخير من الدرس السادس سوف نتعلم كيفية التنقل بين السجلات و كيفية الحفظ و التعديل و الاضافة و الحذف

التنقل بين السجلات :

لن تحتاج للتنقل بين السجلات الا لـ:

السجل التالي

السجل السابق

السجل الأول

السجل الأخير

السجل التالي
ولكي تنتقل للسجل التالي سوف تحتاج لكتابة الأمر التالي في الزر المطلوب و هو في مثالنا cmd6




Private Sub cmd6_Click()
t.MoveNext
Call showdata
End Sub



لاحظ أننا استخدمنا اسم الجدول المستعار t ، ثم بعد ذلك استدعينا الاجراء showdata الذي عملناه في الجزء السابق لكي يقوم بعرض البيانات في السجل التالي وهذه الطريقة تنطبق على جميع انواع التنقل القادمة

السجل السابق
وكل ما تحتاج كتابته هذا الكود بنفس طريقة الكود السابق ( لا تنسىوضع الكود في المكان المناسب و هو هنا cmd7)


Private Sub cmd7_Click()
t.MovePrevious
Call showdata
End Sub



‍‍
السجل الأول
للإنتقال للسجل الأول اكتب الكود التالي في زر الامر cmd8


Private Sub cmd8_Click()
t.MoveFirst
Call showdata
End Sub




السجل الأخير
للانتقال للسجل الاخير اكتب الكود التالي في زر الامر cmd5 :


Private Sub cmd5_Click()
t.MoveLast
Call showdata
End Sub



هذه كل اوامر التنقل التي تحتاجها ، لكن لم ننتهي بعد فستواجهك مشكلة ، فمثلا عندما تريد أن تنتقل للسجل التالي و انت في السجل الاخير طبعا لا يوجد سجل تالي لذلك سيتوقف البرنامج ، و نفس الشيء عند الانتقال للسجل السابق و انت في السجل الاول فلا يوجد سجل سابق فسيتوقف البرنامج ، لذلك سنقوم بإضافة جملة شرطية للتأكد اذا كان السجل الأخير او الاول حسب الحاله ثم نقوم بوضع امر Movefirst او movelast حيث ان هذين الامرين لا يتأثران سواء كان هناك سجل او لا و طريقة استخدامهم هكذا :

ملاحظة

نستخدم الدالة EOF لمعرفة اخر سجل في الجدول ، و نستخدم الدالة BOF لمعرفة اول سجل في الجدول


سنضع الجملة الشرطية التالية في زر الانتقال للتالي فإذا كان هذا اخر سجل اذا انتقل للسجل التالي


If t.EOF Then t.MoveLast




و كذلك في زر الانتقال للسابق نضع شرط اذا كان هذا اول سجل اذا انتقل للسجل الاول


If t.BOF Then t.MoveFirst




لذلك سنضيف الجملتين السابقتين لكود الانتقال للتالي و الانتقال للسابق فييصبح كود الانتقال للتالي هكذا :


Private Sub cmd6_Click()
t.MoveNext
If t.EOF Then t.MoveLast
Call showdata
End Sub




وكود الانتقال للسابق هكذا :


Private Sub cmd7_Click()
t.MovePrevious
If t.BOF Then t.MoveFirst
Call showdata
End Sub






عمليات السجلات


الان سنتعلم عمليات السجلات منحذف و اضافة و تعديل

أضافة سجل
الامر التالي يقوم بإضافة سجل و نضيف عليه اوامر لتمسح ما في مربعات النص لتهيئتها للإضافة:


Private Sub cmd1_Click()
t.AddNew 'اضافة سجل جديد
'الخطوات التالية لكي نقوم بمسح ما في مربعات النص لتهيئتها للإضافة و هي خطوة لتعطي طابع الاحتراف فقط
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub




حفظ سجل
لتحفظ سجل يجب عليك أن تقوم بوضع القيم التي في مربعات النص في الحقول التي توازيها في الجدول ، و لاحظ أنه سوف يعطيك رسالة خطأ عندما تقوم بالحفظ دون ان تقوم باختيار تعديل سجل او اضافة سجل لذلك يفترض بك ان تجعل زر الحفظ في حالة التمكين فقط عندما يضيف المستخدم سجلا او يختار تعديل سجل، كذلك يجب عليك استخدام الدالة Val عند حفظ الحقول الرقمية لتجنب المشاكل عندما يتركه المستخد فارغا ، و ايضا يجب عليك ان تقوم بتحديث الجدول بعد عملية الحفظ لتكمل العملية بسلام و هذا هو الكود المطلوب:



Private Sub cmd2_Click()
'نقوم في الخطوات التالية بنقل ما في مربعات النص الى الحقول التي توازيها في قاعدة البيانات
t!Name = Text1.Text
t!num = Val(Text2.Text) ' لا حظ اننا استخدمنا هذه الدالة لكي يتم قبول الحقل في حالة كونه فارغ لان هذا حقل رقمي val
t!price = Val(Text3.Text)
t.Update
End Sub




تعديل سجل
فقط اخبر البرنامج انك تريد التعديل بهذا الكود


Private Sub cmd3_Click()
t.Edit 'تسمح هذه الخاصية بتعديل البيانات في الحقل
End Sub




حذف سجل
عملية حذف السجل سهلة ، و لكن ماذا بعد ان تحذف السجل ؟ بالطبع يجب ان تعرض السجل التالي ، و ايضا يجب ان تراعي المشاكل التي تواجهك عند انتقالك للسجل التالي فقد لا يكون هناك سجل تالي وقد شرحنا كيف تتفادى هذه المشكلة في هذا الدرس ، و هذا هو الكود اللازم :



Private Sub cmd4_Click()
t.Delete 'لحذف سجل
t.MoveNext 'للانتقال للسجل التالي بعد الحذف
If t.EOF Then t.MoveLast ' يحل هذا الاجراء مشكلة عدم وجود سجل تالي
End Sub



الكاتب: LaSer_26 انقر هنا لمراسلة LaSer_26 أنقر هنا للإنتقال إلى موقع LaSer_26 إضافة للمفضلة إضافة لمفضلة Google إضافة لمفضلة Delicious إضافة لمفضلة Digg إضافة لمفضلة Facebook
 



 

المنتديات

الأذكار

ألعاب الأدعية الصحيحة
راديو وصفات طبخ
مواقع تسوق مكتبة القصص