تقييم الموضوع :
  • 1 أصوات - بمعدل 1
  • 1
  • 2
  • 3
  • 4
  • 5
فيجوال بيسك - التعامل مع قاعدة بيانات أكسيس من خلال Dao - الجزء الثالث والرابع
#1
كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .

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

الدرس :
في هذا الدرس سوف نتعامل مع أحد أشهر أنواع الجداول لعرض البيانات وهو MSFlexGrid .
للوصول اليه اضغط Ctrl+T واختر Microsoft FlexGrid Control 6.0 (SP3)

والآن إلى أهم خصائص properties وطرق methods هذه الأداة :

اقتباس:
[TABLE="width: 100%"]
[TR]
[TD="class: alt2"]Clear : مسح كامل بيانات الجدول .
Cols : عدد الأعمدة الاجمالي في الجدول ، في مثالنا هو 3 ( الرقم - الاسم - الهاتف ) .
Rows : عدد الصفوف ، وهو في مثالنا ( عدد السجلات ) + 1 الخاص بالصف الرئيسي .
Fixed Col : عدد الاعمدة الثابته ، وتعرض هذه الخاصية الأعمدة بصورة دائمة مهما كان عرض الجدول .
Fixed Rows : نفس الخاصية السابقة ولكن بالنسبة للصفوف .
Row : الصف الحالي ، وذلك لتحديد الطرف الأول للخلية Cell .
Col : العمود الحالي ، وذلك لتحديد الطرف الثاني للخلية Cell .
ومن تقاطع قيمتيهما نستطيع اجراء أغلب العمليات الرئيسية .
Text : النص ، وهو النص المعروض في الخلية التي يقف عندها المؤشر ( تقاطع خاصيتي Row ، Col ) .
Text matrix(r,c) : لوضع - قراءة نص في مكان غير المكان الذي يقف عنده مؤشر ( Col , row ) نستخدم هذه الطريقة ، ونرسل للدالة صف وعمود الخلية Cell المطلوبة .
Col Aligment© : محاذاة العمود الذي يتم ارسال قيمته .
Col Width© : عرض العمود المحدد بقيمة c .
Row Height® ارتفاع الصف المحدد بقيمة r .
Back Color : لون خلفية الجدول .
Back Color Fixed : لون خلفية العناصر الثابتة .
Cell Back Color و Cell Fore Color : لون خلفية الخلية Cell والخط بداخلها على الترتيب .
Sort : تحدد طريقة ترتيب بيانات العمود الحالي ، وتأخذ قيم من 0 وحتى 9 .
0 : بدون ترتيب .
1،2 ترتيب تصاعدي وتنازلي على الترتيب .
3و4 : ترتيب تصاعدي وتنازلي بدلالة الارقام .
5و6 : ترتيب تصاعدي وتنازلي بالحروف دون النظر إلى حالة الحرف A=a .
7و8 : ترتيب تصاعدي وتنازلي بالحروف مع النظر إلى حالة الحرف A<>a .
9 ترتيب مخصص .[/TD]
[/TR]
[/TABLE]


أول خطوة هي عمل اتصال بين قاعدة البيانات المؤقتة T2 والجدول :

كود :
Set T2 = D1.OpenRecordset("tb", dbOpenTable)
سوف نقوم الآن بعمل اجراء باسم fill_Table مهمته رسم الجدول ووضع بيانات T2 في داخله .

كود :
Private Sub fill_Table()
End Sub

في هذا الاجراء ومهمتنا الأولى قبل ادخال البيانات هي تصميم الشكل العام للجدول ، فإذا اردنا الكتابة في مربع 0 و 0 مثلاً ، فإننا نقوم بالتالي :
كود :
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "القيمة"
وكذلك مع أي صف في أي عمود ، بشرط أن يكون هذا العمود موجوداً أصلاً .
في بداية تشكيل الجدول ، فبعد مسح الجدول بالكامل ، سوف نجعل عدد الصفوف = 1 وهو صف العنوان فقط ، وعدد الأعمدة 3 ( الرقم - الاسم - الهاتف ) :
MSFlexGrid1.Clear
MSFlexGrid1.Cols = 3
MSFlexGrid1.Rows = 1
ومن ثم ننتقل بين الأعمدة في الصف الأول لوضع رؤوس الجداول :
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "الرقم"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "الاسم"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = "الهاتف"

والآن جاء دور العمل مع قاعدة البيانات ، لا تنس أننا سوف نتعامل الآن مع T2 لأننا سوف نتنقل بينها دون أن نؤثر على العرض الرئيسي للبرنامج .
الخطوة الأولى هي معرفة عدد السجلات ، وهو عدد الصفوف في الجدول + 1 ( من أجل صف العنوان ) .

كود :
If T2.RecordCount < 1 Then Exit Sub
T2.MoveLast
T2.MoveFirst
N = T2.RecordCount

MSFlexGrid1.Rows = N + 1

والآن سوف نقوم بالدوران على كل سجلات قاعدة البيانات ، ومع كل سجل سوف ننقل إلى الصف الخاص به ، ومن ثم نتنقل بين الأعمدة الثلاثة لوضع كل بيان في موضعه الصحيح ، وأخيراً ننتقل إلى السجل التالي .

كود :
For i = 1 To N
MSFlexGrid1.Row = i
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = T2!nu
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = T2!Fn
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = T2!Te
T2.MoveNext
Next i
أخيراً سوف نقوم بتعديل عرض العمودين الأول والثاني ليستطيعا استيعاب مزيد من البيانات في منطقة العرض :


كود :
MSFlexGrid1.ColWidth(0) = 500

MSFlexGrid1.ColWidth(1) = 1500

تابع للجدول MSFlexGrid .

بالنسبة لأحداث Events الجدول MSFlexGrid فأغلبها مثل الأدوات العادية مثل الحدث Click و DblClick ، ولعرض محتوى الخلية Cell عند الضغط عليها مرتين بالماوس نكتب :


كود :
Private Sub MSFlexGrid1_DblClick()

MsgBox MSFlexGrid1.Text

End Sub

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

أحداث أخرى مثل GetFocus و lostFocus تنطلق عندما يصل التركيز ( التحديد ) إلى الاداة أي بمعنى ان تصبح الأداة نشطة سواء من خلال استخدام مفتاح Tap أو من خلال اختيار الأداة بالماوس . أيضاً حدث RowColChange عند تغيير الصف أو العمود ، و SelChange عند تغيير التحديد . Scroll عند استخدام ال Scroll للتنقل بين صفوف الجدول أو اعمدته .

هناك أحداث Drag وهي مشتركة بين اغلب الادوات وهي الخاصة بعمليات سحب الأدوات أو السحب عليها ، أحداث الماوس Mouse أيضاً مشتركة وهي الخاصة بمرور الماوس أو الضغط - الرفع بأزراره المختلفة .

** مثال : كيفية تلوين صف بكامله في الجدول :
لعمل ذلك نستخدم الخاصية Cellbackcolor ، فمثلاً لو اردنا تحديد الصف رقم 2 باللون الأحمر ، فإننا نكتب الأمر التالي :

كود :
MSFlexGrid1.Row = 2

For i = 0 To 2

[SIZE=3]MSFlexGrid1.Col = i[/SIZE]

MSFlexGrid1.CellBackColor = QBColor(12)
Next i
وفي زر الامر الخاص بالتلوين ، سوف نقوم بقراءة رقم الصف المطلوب من خلال Input Box ، ونتأكد من أن الرقم لا يتجاوز الحد الأقصى من الصفوف ، ومن ثم نكتب الأوامر السابقة ، وبذلك يصبح الكود الاجمالي بالشكل التالي :

كود :
Dim x As Integer

x = Val(InputBox("ادخل رقماً يتراوح بين 0 و " & MSFlexGrid1.Rows - 1, "تحديد باللون الأحمر"))

If x < 0 Or x > (MSFlexGrid1.Rows - 1) Then
MsgBox "قيمة صف خاطئ !!!"
Exit Sub
End If
MSFlexGrid1.Row = x
For i = 0 To 2
MSFlexGrid1.Col = i
MSFlexGrid1.CellBackColor = QBColor(12)

Next i



وبنفس الطريقة إذا اردنا تحديد عمود ، حيث سنتقل بين الصفوف المختلفة .

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

والسلام عليكم ورحمة الله وبركاته .
}}}}
تم الشكر بواسطة:
#2
بسم الله الرحمن الرحيم .

المقدمة :
في الدروس السابقة تعلمنا كيفية فتح قاعدة البيانات والتعامل معها ، العرض في الجدول MSFlexGrid ، والآن سوف نقوم بالبحث من خلال احدى جمل الاستعلام وهي جملة Select ، وقريباً سيكون هناك شرح مفصل لجمل الاستعلام .


الدرس :
تذكير سريع بجملة Select .
من أشهر جمل الاستعلامات هي الجملة التي تستخدم الكلمة المفتاحية Select . وصيغتها القياسية هي :

كود :
select field(s) form table(s) where conditon
حيث أن Fields تعني الحقول التي تظهر نتيجتها في البحث ، وقد تكون اسماء حقول مثل name,tele أو قد تكون * لعرض الكل ، وقد تكون نواتج عملية حسابية مثل Max(number) أو Count(*) .

أما Tables فهي اسماء الجداول ، والشروط فهي مثل name='ahmed' و age>5 ، مع استخدام معاملات اخرى مثل between و Like ، وبارميترات Parmeters مختلفة مثل ? و - وغيرها .

وأخيراً اذكرك بأنه عند التعامل مع النصوص فإنه لا بد من وضع '' حول الاسم ، ومع التواريخ يتم وضع ## حول التاريخ وهما النوعان الأكثر استخداماً ، أما الارقام فلا تحتاج إلى اي شيء ...

والآن إلى بداية الدرس ...
سوف نضيف أولاً الجزء الخاص بشاشة البحث ، سوف يكون بالشكل التالي :


البحث عن الأشخاص الذين لديهم ( ComboBox1 ) ( ComboBox2 ) ( searchText )
حيث سيحتوي ComboBox1 على ( الرقم - الاسم - الهاتف ) أما الثاني فيحتوي على ( = - > - < ) ، وتوضع كلمة البحث في ال searchText .
ومن ثم يوضع زر أمر بعرض نتائج البحث في الجدول .


في حدث Form_Load سوف نضيف العناصر المطلوبة للقائمتين :

كود :
Combo1.AddItem "الرقم"
Combo1.AddItem "الاسم"
Combo1.AddItem "الهاتف"
Combo1.ListIndex = 0
Combo2.AddItem "="
Combo2.AddItem ">"
Combo2.AddItem "<"
Combo2.ListIndex = 0

ولا بد من التحكم في القائمة الثانية ، حيث لا يمكن التحكم بها إلا عند اختيار الرقم ، أما الاسم والهاتف فلا يمكن البحث ب < أو > في مثالنا هذا - يمكن استخدامها ولكن ليس في مثل هذا المثال - . ويتم ذلك من خلال الحدث Click للاداة Combo1 :

كود :
Private Sub Combo1_Click()
If Combo1.ListIndex <> 0 Then
Combo2.Enabled = False
Else
Combo2.Enabled = True
End If
End Sub
في بداية زر الامر سوف نتأكد من أنه ادخل كلمة للبحث عنها :

كود :
If searchText.Text = "" Then
MsgBox "نص البحث فارغ"
Exit Sub
End If
لاحقاً سوف نشكل جملة الاستعلام ، وذلك بالشكل التالي :

كود :
Dim fldname As String
Dim op As String
Dim lst As String
If Combo1.ListIndex = 0 Then
fldname = "nu"
op = Combo2.Text
lst = ""
ElseIf Combo1.ListIndex = 1 Then
fldname = "fn"
op = "='"
lst = "'"
Else
fldname = "te"
op = "="
lst = ""
End If
Dim sql As String
sql = "select * from tb where " & fldname & op & searchText.Text & lst

حيث نخزن في fldname الحقل الذي نبحث عنه ، op معامل البحث ، واخيراً lst تحدد إذا ما كنا سوف نضيف ' من أجل النصوص .


والآن جاء دور تنفيذ جملة الاستعلام على قاعدة البيانات D1 ومن خلال الجدول الاضافي T2 :

كود :
Set T2 = D1.OpenRecordset(sql, dbOpenDynaset)
وأخيراً سوف نقوم بملء الجدول من خلال استدعاء Fill_Table .

كود :
fill_Table
خاتمة :


في هذا السلسلة البسيطة من الدروس تعرفنا على اساسيات التعامل مع Dao من خلال فيجوال بيسك Visual Basic مع قواعد بيانات Access .
وملف العمل موجود في المرفقات ...


أسأل الله أن أكون قد وفقت في هذا الشرح البسيط ، فما كان فيه من صواب فمن الله ، وما كان من خطأ فمن نفسي والشيطان ، والله الهادي إلى سواء السبيل .


والسلام عليكم ورحمة الله وبركاته .


الملفات المرفقة
.zip   daoexample.zip (الحجم : 6.47 ك ب / التحميلات : 261)
}}}}
تم الشكر بواسطة: Amir_alzubidy , المبرزي


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  برنامج لمتابعة محل بيع الجوالات اكثر من رائع بقاعدة بيانات جيدة derbaliammar 8 1,686 09-10-16, 11:11 AM
آخر رد: MicroDoha
  تعلم كيفية حفظ و أسترجاع الصورة فى قاعدة بيانات أكسس باستخدام الكائن Stream object أحمد مناع 9 4,482 29-05-16, 12:24 AM
آخر رد: CLARO
  طريقة تشغيل فيجوال بيسك6 على وندوز7 ahmed3d 5 1,437 10-12-15, 03:08 AM
آخر رد: awidan76
  مساعدة في طباعة صوره من قاعدة بيانات basma123 0 604 26-09-14, 03:00 PM
آخر رد: basma123
  طلب شرح اخذ نسخة احتياطية من قاعدة البيانات DIGTAL 2 1,095 31-07-13, 03:14 AM
آخر رد: طارق بيتا
  الاتصال بقاعدة بيانات Access على الشبكة المحلية أحمد مناع 1 1,430 18-07-13, 07:16 PM
آخر رد: Reme
  كيفية التعامل مع دوال الوقت و التاريخ و كيفية تنسيقهما فى الفجوال بيسك 6 the viper 6 1,898 15-06-13, 08:17 PM
آخر رد: husain1980
  شرح للمتغيرات و الثوابت و المعاملات في الفيجول بيسك Ahmad Jawad 5 2,379 12-06-13, 01:14 AM
آخر رد: بلحسين الدين
  استخدام DataControl للربط مع قواعد البيانات في فيجوال بيسك - الجزء الثاني RaggiTech 1 1,944 14-10-12, 02:29 PM
آخر رد: RaggiTech
  استخدام DataControl للربط مع قواعد البيانات في فيجوال بيسك - الجزء الأول RaggiTech 0 1,170 14-10-12, 02:26 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم