14-10-12, 02:06 PM
بسم الله الرحمن الرحيم .
المقدمة :
في الدرس السابق تعلمنا طرق انشاء وربط قاعدة البيانات .
وسوف نستمر بإذن الله خلال هذا الدرس في اكمال التعامل مع قواعد البيانات Access من خلال DAO
الدرس :
بعد ان قمنا بربط قاعدة البيانات في الدرس السابق ، وصلنا إلى السطر Form1.Show والذي سوف يظهر الفورم الأول باطلاق الحدث Event المسمى ب Load وأحداث أخرى . إلا أن الحدث Load هو انسب الأحداث لكتابة اسطر أوامرنا بالنسبة لهذا التطبيق .
في هذا الحدث سوف نقوم بـ :
* ربط الجدول الأول بقاعدة البيانات .
* التأكد من عدد السجلات الموجودة ، فإذا كان هناك سجلات فإننا سنطلب الإجراء ShowData ، وإلا فإننا سوف نطلب الاجراء ShowNoData :
والآن سوف نقوم بكتابة اسطر كل من حدثي ، ShowData ، و ShowNoData ، فكل ما في الإجراء Sub الأول هو قراءة القيم الحالية للسجلات ووضعها في أماكنها بالشكل التالي :
فيما سيضع الإجراء الثاني قيم فارغة "" في الأماكن الخاصة بالعرض :
أوامر التنقل بين السجلات :
تشترك جميع هذه الأوامر الأربعة في صيغة عامة ، فأولاً التأكد من وجود سجلات ، ومن ثم التأكد من أنني لست في حالة تعديل أو اضافة وذلك من خلال معرفة حالة زر أمر ( حفظ ) ومن ثم التأكد من أنني لست في البداية ( لأمر السابق ) وأنني لست في النهاية ( لأمر التالي ) ، ومن ثم تنفيذ الأمر ( MoveNext , MoveLast , MovePrevious , MoveFirst ) وأخيراً استدعاء ShowData .
وهذه هي الأوامر للاجراءات الأربعة :
أوامر الإنشاء ، والتعديل ، وحفظ معلومات السجلات ، أو انهاء عملية التعديل والاضافة بلا حفظ .
سوف نقوم في أمر انشاء سجل جديد بالتأكد أولاً أننا لسنا في حالة اضافة أو تعديل ، ومن ثم نقوم باستخدام أمر Addnew لفتح قاعدة البيانات للاستقبال ، ومن ثم تمكين كل من زري ( حفظ - انهاء بلا حفظ ) ومن ثم افراغ الخانات للمستخدم لادخال البيانات المطلوبة :
وبالنسبة لأمر التعديل فسوف يزيد نقطة واحدة فقط ، وهي التأكد من وجود سجلات أصلاً لتعديلها ، وأننا لن نقوم بافراغ مربعات النص TextBoxes ، مع مراعاة استخدام الأمر Edit بدلاً من AddNew :
في الحفظ ، سوف نستخدم الأمر Update لتحديث التغييرات سواء كانت بالاضافة والتعديل ، مع الغاء تمكين Enabled لزري الحفظ - انهاء بلا حفظ .
وأما في انهاء بلا حفظ فسوف نستخدم الأمر CancelUpdate .
هناك اختلاف آخر وهو أننا نستخدم الدالة Val مع القيم الرقمية للتأكد من أن المستخدم قام بادخال أرقام وليس حروف مثلاً .
وهذه هي أوامر هذين الاجراءين :
*** ملاحظة هامة : من الخطأ فتح قاعدة البيانات للاضافة AddNew أو للتعديل Edit وتنفيذ أمر الحفظ Update في حدث آخر مما يجعل قاعدة البيانات في حالة انتظار تطول أو تقصر ، مما قد يتسبب بمشاكل في حالة انقطاع التيار الكهربي أو اعادة تشغيل الجهاز على سبيل المثال ، والصحيح أن تتم الاضافة والحفظ وكذلك مع التعديل في اجراء واحد ، وإنما ما قمت به هو للتسهيل فقط ( وبصراحة فهذا الدرس قديم كتبته في البدايات وكسلت اعمله تعديل ) .
نقطة أخرى ، وهو أن الغالب أن باقي الأزرار تتعطل Enabled = False ما عدا زري الحفظ حتى تنتهي عملية الاضافة .
عرض عدد السجلات :
نستخدم لهذا الغرض الدالة RecordCount والتي تعود بعدد السجلات الحالية .
وذلك بالشكل التالي :
الحذف :
كما هي العادة سوف نتأكد أولاً بأننا لسنا في وضع اضافة أو تعديل ، وذلك بعد التأكد من وجود سجلات أصلاً .
في الخطوة التالية سوف نعرض على المستخدم رسالة تحذيرية من اتمام العملية ، وفيما إذا اصر على اتمام العملية فإننا سوف نقوم باستخدام الدالة Delete لحذف السجل ، ومن ثم الانتقال للسجل التالي حتى لا نبقى في سجل فارغ . أو اظهار عدم وجود سجلات في حالة كان السجل المحذوف هو السجل الأخير .
خاتمة :
في هذا الدرس تعرفنا سوية على كيفية التعامل واجراء عمليات قواعد البيانات المختلفة من خلال DAO .
في الدرس القادم سوف نتعرف بإذن الله على كيفية التعامل مع الجداول من نوع MSFlexGrid .
والسلام عليكم ورحمة الله وبركاته .
المقدمة :
في الدرس السابق تعلمنا طرق انشاء وربط قاعدة البيانات .
وسوف نستمر بإذن الله خلال هذا الدرس في اكمال التعامل مع قواعد البيانات Access من خلال DAO
الدرس :
بعد ان قمنا بربط قاعدة البيانات في الدرس السابق ، وصلنا إلى السطر Form1.Show والذي سوف يظهر الفورم الأول باطلاق الحدث Event المسمى ب Load وأحداث أخرى . إلا أن الحدث Load هو انسب الأحداث لكتابة اسطر أوامرنا بالنسبة لهذا التطبيق .
في هذا الحدث سوف نقوم بـ :
* ربط الجدول الأول بقاعدة البيانات .
* التأكد من عدد السجلات الموجودة ، فإذا كان هناك سجلات فإننا سنطلب الإجراء ShowData ، وإلا فإننا سوف نطلب الاجراء ShowNoData :
كود :
Private Sub Form_Load()
Set T1 = D1.OpenRecordset("tb", dbOpenTable)
If T1.RecordCount < 1 Then
Call shownodata
Else
Call showdata
End If
End Subوالآن سوف نقوم بكتابة اسطر كل من حدثي ، ShowData ، و ShowNoData ، فكل ما في الإجراء Sub الأول هو قراءة القيم الحالية للسجلات ووضعها في أماكنها بالشكل التالي :
كود :
Private Sub showdata()
Text1.Text = T1!nu
Text2.Text = T1!Fn
Text3.Text = T1!Te
End Subكود :
Private Sub shownodata()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Subأوامر التنقل بين السجلات :
تشترك جميع هذه الأوامر الأربعة في صيغة عامة ، فأولاً التأكد من وجود سجلات ، ومن ثم التأكد من أنني لست في حالة تعديل أو اضافة وذلك من خلال معرفة حالة زر أمر ( حفظ ) ومن ثم التأكد من أنني لست في البداية ( لأمر السابق ) وأنني لست في النهاية ( لأمر التالي ) ، ومن ثم تنفيذ الأمر ( MoveNext , MoveLast , MovePrevious , MoveFirst ) وأخيراً استدعاء ShowData .
وهذه هي الأوامر للاجراءات الأربعة :
كود :
Private Sub Command1_Click()
If T1.RecordCount < 1 Then Exit Sub
If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If
If s = vbNo Then Exit Sub
T1.MoveFirst
Command7.Enabled = False
Command8.Enabled = False
Call showdata
End Sub
Private Sub Command2_Click()
If T1.RecordCount < 1 Then Exit Sub
If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If
If s = vbNo Then Exit Sub
T1.MovePrevious
If T1.BOF Then T1.MoveFirst
Command7.Enabled = False
Command8.Enabled = False
Call showdata
End Sub
Private Sub Command3_Click()
If T1.RecordCount < 1 Then Exit Sub
If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If
If s = vbNo Then Exit Sub
T1.MoveNext
If T1.EOF Then T1.MoveLast
Command7.Enabled = False
Command8.Enabled = False
Call showdata
End Sub
Private Sub Command4_Click()
If T1.RecordCount < 1 Then Exit Sub
If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If
If s = vbNo Then Exit Sub
T1.MoveLast
Command7.Enabled = False
Command8.Enabled = False
Call showdata
End Subأوامر الإنشاء ، والتعديل ، وحفظ معلومات السجلات ، أو انهاء عملية التعديل والاضافة بلا حفظ .
سوف نقوم في أمر انشاء سجل جديد بالتأكد أولاً أننا لسنا في حالة اضافة أو تعديل ، ومن ثم نقوم باستخدام أمر Addnew لفتح قاعدة البيانات للاستقبال ، ومن ثم تمكين كل من زري ( حفظ - انهاء بلا حفظ ) ومن ثم افراغ الخانات للمستخدم لادخال البيانات المطلوبة :
كود :
If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If
If s = vbNo Then Exit Sub
T1.AddNew
Command7.Enabled = True
Command8.Enabled = True
Call shownodataوبالنسبة لأمر التعديل فسوف يزيد نقطة واحدة فقط ، وهي التأكد من وجود سجلات أصلاً لتعديلها ، وأننا لن نقوم بافراغ مربعات النص TextBoxes ، مع مراعاة استخدام الأمر Edit بدلاً من AddNew :
كود :
If T1.RecordCount < 1 Then Exit Sub
If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If
If s = vbNo Then Exit Sub
T1.Edit
Command7.Enabled = True
Command8.Enabled = Trueفي الحفظ ، سوف نستخدم الأمر Update لتحديث التغييرات سواء كانت بالاضافة والتعديل ، مع الغاء تمكين Enabled لزري الحفظ - انهاء بلا حفظ .
وأما في انهاء بلا حفظ فسوف نستخدم الأمر CancelUpdate .
هناك اختلاف آخر وهو أننا نستخدم الدالة Val مع القيم الرقمية للتأكد من أن المستخدم قام بادخال أرقام وليس حروف مثلاً .
وهذه هي أوامر هذين الاجراءين :
كود :
Private Sub Command7_Click()
T1.CancelUpdate
Call showdata
Command7.Enabled = False
Command8.Enabled = False
End Sub
Private Sub Command8_Click()
T1!nu = Val(Text1.Text)
T1!Fn = Text2.Text
T1!Te = Val(Text3.Text)
T1.Update
Command7.Enabled = False
Command8.Enabled = False
End Sub*** ملاحظة هامة : من الخطأ فتح قاعدة البيانات للاضافة AddNew أو للتعديل Edit وتنفيذ أمر الحفظ Update في حدث آخر مما يجعل قاعدة البيانات في حالة انتظار تطول أو تقصر ، مما قد يتسبب بمشاكل في حالة انقطاع التيار الكهربي أو اعادة تشغيل الجهاز على سبيل المثال ، والصحيح أن تتم الاضافة والحفظ وكذلك مع التعديل في اجراء واحد ، وإنما ما قمت به هو للتسهيل فقط ( وبصراحة فهذا الدرس قديم كتبته في البدايات وكسلت اعمله تعديل ) .
نقطة أخرى ، وهو أن الغالب أن باقي الأزرار تتعطل Enabled = False ما عدا زري الحفظ حتى تنتهي عملية الاضافة .
عرض عدد السجلات :
نستخدم لهذا الغرض الدالة RecordCount والتي تعود بعدد السجلات الحالية .
وذلك بالشكل التالي :
كود :
nom = T1.RecordCount
MsgBox "عدد السجلات الحالي هو : " & nom, vbInformation, "مثال"الحذف :
كما هي العادة سوف نتأكد أولاً بأننا لسنا في وضع اضافة أو تعديل ، وذلك بعد التأكد من وجود سجلات أصلاً .
في الخطوة التالية سوف نعرض على المستخدم رسالة تحذيرية من اتمام العملية ، وفيما إذا اصر على اتمام العملية فإننا سوف نقوم باستخدام الدالة Delete لحذف السجل ، ومن ثم الانتقال للسجل التالي حتى لا نبقى في سجل فارغ . أو اظهار عدم وجود سجلات في حالة كان السجل المحذوف هو السجل الأخير .
كود :
Private Sub Command9_Click()
If T1.RecordCount = 0 Then Exit Sub
If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If
If s = vbNo Then Exit Sub
Dim ase
aas = 1 + 16 + 256
ase = MsgBox("هل تريد بالتأكيد حذف السجل الحالي ؟؟؟", aas + 524288 + 1048576, "مثال")
If ase = vbNo Then Exit Sub
T1.Delete
If T1.RecordCount <> 0 Then
T1.MoveNext
If T1.EOF Then T1.MoveLast
Call showdata
Else
Call shownodata
End If
End Subخاتمة :
في هذا الدرس تعرفنا سوية على كيفية التعامل واجراء عمليات قواعد البيانات المختلفة من خلال DAO .
في الدرس القادم سوف نتعرف بإذن الله على كيفية التعامل مع الجداول من نوع MSFlexGrid .
والسلام عليكم ورحمة الله وبركاته .
