بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
سوف يكون هذا الدرس كمتابعة لدرس السابق الذي طرحته وقد حرصت على ان اقوم بعمل هذا الدرس لجعل برنامجك الذي سوف تصنعه اكثر مرونه وخالي من الاخطأ فمثلا ليس المستخدم مثلك انت صانع البرنامج فالمستخدم قد يضغط زر الحذف وهو غير محدد سجل او لا توجد سجلات في قاعدة البيانات لتظهر له رسالة الخطأ اما انت فاعرف بكودات البرنامج لن تقوم بهذه الخطوة لذا سوف نقوم بجعل البرنامج الذي قمنا بصنعه في الدرس السابق خالي من الاخطأ سوف نبدء من زر التعديل كل ما يلزمنا هنا التحقق من ان المستخدم قد اختار سجل ليقوم بتعديله وسوف نستخدم في هذا التحقق الخاصية AbsolutePosition التي تقوم باعطائنا رقم السجل المختار واذا لم يكن هنالك من سجل محدد سوف تكون القيمة عندئذ -1 اتصور ان الفكرة قد توضحت الان فكل ما يلزمنا هنا بان نكتب جملة التحقق بالشكل الاتي
كود PHP:
If Data1.Recordset.AbsolutePosition = -1 Then
مثل ما ذكرت -1 تعني لا يوجد سجل محدد بالجملة السابقة تقوم بالتحقق واذا كان يساوي -1 اي لا يوجد سجل محدد لتعديل يقوم البرنامج بتنفيذ حدث معين فلو اردنا ان نضع كود التعديل كاملا سوف يكون بالشكل الاتي
كود PHP:
Private Sub Command2_Click()
If Data1.Recordset.AbsolutePosition = -1 Then
MsgBox "Your Message"
Else
Data1.Recordset.Edit
Data1.Recordset.Fields!الاسم = Text1.Text
Data1.Recordset.Fields!العمر = Text2.Text
Data1.Recordset.Fields!العنوان = Text3.Text
Data1.Recordset.Update
End If
End Sub
فلو اردنا شرح الكود السابق : رح يكون الشرح كالاتي في السطر الاول قمنا بالتحقق هل هنالك سجل محدد لتعديله ام لا فاذا لم يكن هنالك سجل محدد فيقوم بالاتي وهو عرض رسالة للمستخدم اما اذا لم يتحقق الشرط اي كان هنالك سجل محدد فيقوم البرنامج بعملية التعديل
وفي هذه الحالة سوف نظمن عدم حصول خطأ في كود التعديل سببه عدم اختيار سجل وبعد جعل كود التعديل اكثر صلابة نقوم بالانتقال الى كود الحذف الذي سوف تكون جملة التحقق نفس الجملة السابقة ليكون الكود بالشكل الاتي
كود PHP:
Private Sub Command3_Click()
If Data1.Recordset.AbsolutePosition = -1 Then
MsgBox "Your Message"
Else
Data1.Recordset.Delete
End If
End Sub
نفس العميلة التي قكمنا بها في كود التعديل قمنا بالتحقق من اختيار المستخدم وتنفيذ اوامر على حسب ذلك من هنا ضمنا سير البرنامج بصلابة من حفظ , تعديل , حذف بيانات فكر قليلا معي الان في كود الانتقال الى السجل الاول والاخير اذا كانت قاعدة البيانات فارغة واردنا الانتقال الى السجل الاول الذي سوف يكون غير موجود الن يحصل خطأ يقتل البرنامج بالتاكيد سوف يحصل اذن ما العمل العمل هو ان تمسك يدي ونقوم انا وانت بكتابة جملة التحقق من عدد السجلات والتي سوف نستخدم فيها الخاصية RecordCount التي ترجع قيمة رقمية وهي عدد السجلات في قاعدة البيانات وتبدء الترقيم من الصفر وبهذا سوف يكون الكود بالشكل الاتي
كود PHP:
Private Sub Command5_Click()
If Data1.Recordset.RecordCount = 0 Then
MsgBox "Your Message"
Else
Data1.Recordset.MoveFirst
End If
End Sub
الموضوع سهل جدا لقد وضعنا شرط لتحقق من عدد السجلات فاذا كانت صفرا يقوم باظهار رسالة للمستخدم تقوم بتنبيه اما اذا كانت عدد السجلات اكثر من واحد فسوف يتنفذ الحدث بكل سلاسة وكذلك الكود سوف يكون بالنسبه لكود الانتقال الى السجل الاخير ونفس الشرط السابق انتهينا تقريبا ,, لكن هل تفكر بما افكر به بقى لدينا زرا امر وهي الانتقال الى السجل التالي والانتقال الى السجل السابق ما الخطأ الذي نتوقعه منهم الخطأ الذي نتوقعه هو ان يقوم البرنامج بالانتقال من السجل الاخير الى الفراغ اي يخرج من فهرسة وعند محاولة الانتقال سوف يظهر الخطأ لحل هذه المشكله سوف نقوم بوضع كود بسيط لتحقق من اذا كان البرنامج واقف على السجل الاخير فاذا كان واقف على السجل الاخير لا ينفذ حدث الانتقال حتى لا يخرج من الفهرسة واذا كان واقف على السجل الاول ويحاول الرجوع لا يسمح له بذلك سوف نقوم في هذان الكودان باستخدام الخواص Eof و Bof وكلتاهما تعطين قيم هي اما True او False والخاصية Eof هي لتحقق اذا كان البرنامج خارج اطار الفهرسة من بعد مروره على السجل الاخير والخاصية Bof لتحقق من اذا ما كان البرنامج خارج اطار الفهرسة بعد مروره على السجل الاول فسوف يكون الكود بكل بساطة كالاتي
كود PHP:
Private Sub Command4_Click()
If Data1.Recordset.EOF = True Then
Your Command
Else
Data1.Recordset.MoveNext
End If
End Sub
هذا بالنسبة لكود الانتقال الى السجل التالي فكما نلاحظ اذا كان البرنامج خارج اطار الفهرسة لن يقوم البرنامج بتنفيذ الكود حتى لا يحصل الخطأ واما بالنسبة لكود الانتقال الى السجل السابق فسوف يكون بنفس الصيغة على اختلاف بسيط كالاتي
كود PHP:
Private Sub Command6_Click()
If Data1.Recordset.BOF = True Then
Your Command
Else
Data1.Recordset.MovePrevious
End If
End Sub
والشرح نفس الشرح السابق للمزيد من المعلومات حول تفادي الاخطأ ومحاولة قنصها يمكنك مراجعة موضوعي من خلال الرابط الاتي
نهاية الدرس