عرض السجل الذي تم النقر عليه في مربع النص والقائمة .
بما أننا نريد أن نعرض بيانات أي حقل بمجرد النقر عليه ، فإننا نحتاج بمجرد النقر عليه للحصول على رقمه ، ولنر سوية هذا الامر .
عندما انقر على أي خلية فإن خاصيتي
Col و
Row يتم ضبطهما طبقاً للوضع الجديد ، وبهذه الطريقة تستطيع الحصول على رقم الصف والعمود بعد أي نقرة باضافة الأمر التالي في حدث
Click للجدول :
MsgBox "Row : " & MSFlexGrid1.Row & " Col : " & MSFlexGrid1.Col
وبنفس الطريقة يمكننا الحصول على محتويات الخلية التي قمنا بالنقر عليها بواسطة أمر كهذا :
رمز:
MsgBox MSFlexGrid1.Text
ولكننا لا نريد محتويات هذه الخلية ، بل إننا نحتاج محتويات خلية الرقم في نفس الصف للبحث عنها وعرضها ... لذا فإننا نقوم بالتحول إلى خلية الرقم :
رمز:
MSFlexGrid1.Col = 1
MsgBox MSFlexGrid1.Text
ستجد أن الأمر السابق يعطيك رقم الصف بغض النظر عن مكان النقر .
وهذا الرقم هو ما سوف نستخدمه في البحث .
سنبدأ الآن بكتابة جملة استعلام نبحث من خلالها عن السجل الذي له هذا الرقم ، تذكر أننا سوف نقوم بذلك من خلال استعلام مزدوج لأننا نريد معرفة اسم المصنع والنوع وليس أرقامهما ، لذلك سوف يكون مثل الاستعلام في الدرس السابق لكن مع اضافة شرط آخر ل Where بحيث يصبح and Number = MSFlexGrid1.Text حيث أننا لا نريد سوى سجل واحد فقط .
رمز:
SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number and tb_product.number =" & MSFlexGrid1.Text & ""
وبنفس طريقة الجدول سوف نضع البيانات المناسبة في مربعات النص :
رمز:
If T4.RecordCount <> 0 Then
T4.MoveFirst
Text7.Text = T4.Fields("tb_product.Number")
Text1.Text = T4.Fields("tb_product.name")
Text2.Text = T4.Fields("tb_category.name")
Text3.Text = T4.Fields("tb_factory.name")
Text4.Text = T4!price
Text5.Text = T4.Fields("Count")
Text6.Text = T4!Box_Count
وماذا أيضاً ... نحتاج لأن تشير القائمة إلى البضاعة الحالية ، وبما أننا نتعامل في القائمة مع Tb_Product.name فسيصبح الأمر بالشكل التالي :
رمز:
Combo1.Text = T4!.Fields("tb_product.name")
ولكن بما أننا سنستخدم هذا الأمر لاحقاً فسوف نضعه في اجراء جديد ونسميه ShowData ... وبذلك يصبح الأمر بالشكل التالي :
رمز:
Private Sub ShowData()
Text7.Text = T4.Fields("tb_product.Number")
Text1.Text = T4.Fields("tb_product.name")
Text2.Text = T4.Fields("tb_category.name")
Text3.Text = T4.Fields("tb_factory.name")
Text4.Text = T4!price
Text5.Text = T4.Fields("Count")
Text6.Text = T4!Box_Count
End Sub
أخيراً لا تنس أن تغلق قاعدة البيانات T4 .
ثمة أمر آخر ، وهو أننا نريد أيضاً عند اختيار اسم من القائمة أن يظهر في مربعات النصوص ، لذلك بنفس الطريقة السابقة في الاستعلام سوى أننا لن نبحث بدلالة الرقم بل بدلالة الاسم ، ولذا سنضع الاسم بين علامتي تنصيص مفردة ' ' .
رمز:
Private Sub Combo1_Click()
SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number and tb_product.name ='" & Combo1.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
If T4.RecordCount <> 0 Then
T4.MoveFirst
Call ShowData
End If
T4.Close
End Sub
ما زالت أمامنا خطوة واحدة ، وهو عند حدث البداية للفورم ، فما هي المحتويات التي ستظهر في مربعات النصوص ... مثلاً سوف تكون عن أول بضاعة ، لذا فسوف نضع الأمر التالي :
رمز:
Combo1.ListIndex = 0
وبالتالي سوف ينفذ حدث Click للقائمة تلقائياً .
حل آخر لنقل المعلومات إلى مربعات النص عند النقر على الجدول .
بالتأكيد أنت لا زلت تتذكر الطريقة التي عرضنا فيها البيانات عند النقر على الجدول ، وكانت اجمالاً بالشكل التالي :
ولو لاحظت أننا نضع البيانات الموجودة في الجدول ... أليس كذلك ؟
إذاً فلماذا نقوم بعملية استعلام رغم أن بإمكاننا قراءة المعلومات من الجدول .
في الطريقة السابقة كنا نقرأ الرقم فقط بالكود التالي :
رمز:
MSFlexGrid1.Col = 1
لكننا في نفس الوقت نستطيع الانتقال إلى العمود الثاني والثالث والرابع وحتى الأخير ووضع المعلومات بهم في مربعات النصوص ... انظر الكود التالي :
رمز:
MSFlexGrid1.Col = 1
Text7.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 2
Text1.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 3
Text2.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 4
Text3.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 5
Text4.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 6
Text5.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 7
Text6.Text = MSFlexGrid1.Text
هل يبدو الأمر سهلاً ؟ عموماً لك مطلق الحرية في استخدام ما تراه مناسباً وقد أرفقت الكودين في البرنامج لاختيار ما تريد .
وماذا بعد ؟ تخيل أن مربعات النصوص لدينا بها خاصية
Index تبدأ من 0 وتنتهي بـ 6 ولهم جميعاً اسم Text1 . هل تستطيع تخيل مدى بساطة الكود السابق في هذه الحالة :
رمز:
For i = 0 To 7
MSFlexGrid1.Col = i + 1
Text1.Text(i) = MSFlexGrid1.Text
Next i
لكن هذا الأمر لن يناسبنا في هذه الشاشة لأننا قمنا بعمل مربعات النصوص Text1,Text2,......,Text7 . ولكننا سوف نتذكر ذلك في تصميم الشاشات القادمة .
سيتم ارفاق الملف بعد الدرس المقبل ...
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته