رائع
فعلا رائع
معلومات حلوة جدا
بعضها لم اسمع به قبلا
جزاك الله خيرا اخي
وموضوع قواعد البيانات يهمني لاني لم اتعمق به قبلا
بانتظار الدرس التالي
وفقك الله وجعله في ميزان حسناتك
سلام
عرض للطباعة
رائع
فعلا رائع
معلومات حلوة جدا
بعضها لم اسمع به قبلا
جزاك الله خيرا اخي
وموضوع قواعد البيانات يهمني لاني لم اتعمق به قبلا
بانتظار الدرس التالي
وفقك الله وجعله في ميزان حسناتك
سلام
اقتباس:
المشاركة الأصلية كتبت بواسطة سر العرب
شكرا لك اخي الكريم
سر العرب
على هذه الكلمات
نعم سوف تتنج منظومة انشاء الله
وننتج قاعدة بيانات ان شاء الله
فقط تابع معي السلسلة
الي النهااية
شكرا على المرور
بارك الله فيكاقتباس:
المشاركة الأصلية كتبت بواسطة amawi
اخي amawi
علي هذه المشارك القيمة
موضوع قاعدة البيانات سوف اشرحه بالتفصيل انشاء الله
فقط تابع معي السلسلة
شكرا على هذا التشجيع الممتاز
جزاك الله الف خير
السلام عليكم
درس ممتاتز
انا متبعة معاك الدرس اول باول
ارجاء من الاخوة المراقبين ترشيح الموضوع
انا حاولت
لكن يطلع لي البلاغ عن مشاركة سيئة
ممكن ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
شكرا اخي الحبيب لمين على هذا الدرس
اقتباس:
المشاركة الأصلية كتبت بواسطة حبيبة الشيخ
لا شكر على واجب
انشاء الله استمر في الدروس
طايما اني في احلا منتدي في العالم
واحلا اعضاء
اشكرك على هذا الكلام الطيب
يا ريت لو يرشحوا هذا الموضوع
لكن انا اترك ذلك لتقييم الاخوة المراقبين
شكرا اختي العزيزة
حبيبة الشيخ
http://free.7host06.com/Hussienfun/M...IFBasmalah.gif
http://www.l22l.com/l22l-up-4/9808f0b98e.gif
في الدرس السابق تعلمنا طرق انشاء وربط قاعدة البيانات .
وسوف نستمر بإذن الله خلال هذا الدرس في اكمال التعامل مع قواعد البيانات 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 .
* في الدرس الأخـــر سوف يكون ملف مرفق على جميع العمليات خلال الدروس بإذن الله .
والسلام عليكم ورحمة الله وبركاته .
رائع فعلا رائع
لم سعني الوقت لقرائة الدرس كاملا
لكن حين ارجع سأقرأه باذن الله
شكرا جزيلا لك
بالتوفيق
شكرا على المروراقتباس:
المشاركة الأصلية كتبت بواسطة amawi
انا مستيك لما تقرا الموضوع
السلام عليكم
بارك الله فيك على هذا الموضوع
درس مفيد افادك الله
اقتباس:
المشاركة الأصلية كتبت بواسطة سر العرب
شكرا
على هذا الرد الجميل
يا اخي سر العرب
لتمني ان تستفيد من الموضوع
السلام عليكم
انا اسفة على التاخر
لكن درس رائع
انا الان اطبقه على الجهاز عندي
بارك الله فيك
وعليكم السلام
شكرا جزيلا على هذا الرد
اتمني انك تطبقيه زين
شكرا على المرور
http://free.7host06.com/Hussienfun/M...IFBasmalah.gif
في الدرس السابق تعلمنا طرق انشاء وربط قاعدة البيانات .
وكيفية التعامل معها .
في هذا الدرس سوف نتعرف على أحد اشهر أنواع جداول العرض ،
وهو MSFlexGrid .
الدرس :
في هذا الدرس سوف نتعامل مع أحد أشهر أنواع الجداول لعرض البيانات وهو MSFlexGrid .
للوصول اليه اضغط Ctrl+T واختر (Microsoft FlexGrid Control 6.0 SP3)
والآن إلى أهم خصائص properties وطرق methods هذه الأداة :
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(c) : محاذاة العمود الذي يتم ارسال قيمته .
Col Width(c) : عرض العمود المحدد بقيمة c .
Row Height(r) ارتفاع الصف المحدد بقيمة 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 ترتيب مخصص .
أول خطوة هي عمل اتصال بين قاعدة البيانات المؤقتة T2 والجدول :Set T2 = D1.OpenRecordset("tb", dbOpenTable)
سوف نقوم الآن بعمل اجراء باسم fill_Table مهمته رسم الجدول ووضع بيانات T2 في داخله .
Private Sub fill_Table()
End Subونستدعيه من خلال زر الأمر السابق بكتابة fill_Table .
في هذا الاجراء ومهمتنا الأولى قبل ادخال البيانات هي تصميم الشكل العام للجدول ، فإذا اردنا الكتابة في مربع 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
أخيراً سوف نقوم بتعديل عرض العمودين الأول والثاني
ليستطيعا استيعاب مزيد من البيانات :
تابع للجدول MSFlexGrid .كود:MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 1500
بالنسبة لأحداث Events الجدول MSFlexGrid فأغلبها مثل الأدوات العادية
مثل الحدث Click و DblClick ، ولعرض محتوى الخلية عند الضغط عليها مرتين
بالماوس نكتب :
كود:
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
MSFlexGrid1.Col = i
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 ،
الاحداث ، وكيفية وضع القيم المختلفة داخل الجدول .
في الدرس القادم سوف نقوم بعمل بحث على القيم الموجودة في قاعدة البيانات .
والسلام عليكم ورحمة الله وبركاته .
بارك الله فيك اخي الحبيب لمين على هذا الجهر الرائع والمشرف
اتمني من الاخوة الكرام المراقبين تثبيت هذا الموضوع
انا من الحاضرين المتابعين لهذه السلسلة
القيمة
اقتباس:
المشاركة الأصلية كتبت بواسطة سر العرب
اهلا اخي سر العرب
اشكرك على هذه المشاركة
انشاء الله يكون فيه المزيد من الدروس
الاكثر افادة