رائع
فعلا رائع
معلومات حلوة جدا
بعضها لم اسمع به قبلا
جزاك الله خيرا اخي
وموضوع قواعد البيانات يهمني لاني لم اتعمق به قبلا
بانتظار الدرس التالي
وفقك الله وجعله في ميزان حسناتك
سلام
رائع
فعلا رائع
معلومات حلوة جدا
بعضها لم اسمع به قبلا
جزاك الله خيرا اخي
وموضوع قواعد البيانات يهمني لاني لم اتعمق به قبلا
بانتظار الدرس التالي
وفقك الله وجعله في ميزان حسناتك
سلام
شبكة قانوني الاردن
نسعى معا للرقي بالمهنة القانونية في الاردن
www.lawjo.net
-----------------------------------------
e_amawi (at) yahoo.com
المشاركة الأصلية كتبت بواسطة سر العرب
شكرا لك اخي الكريم
سر العرب
على هذه الكلمات
نعم سوف تتنج منظومة انشاء الله
وننتج قاعدة بيانات ان شاء الله
فقط تابع معي السلسلة
الي النهااية
شكرا على المرور
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان
بارك الله فيكالمشاركة الأصلية كتبت بواسطة amawi
اخي amawi
علي هذه المشارك القيمة
موضوع قاعدة البيانات سوف اشرحه بالتفصيل انشاء الله
فقط تابع معي السلسلة
شكرا على هذا التشجيع الممتاز
جزاك الله الف خير
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان
السلام عليكم
درس ممتاتز
انا متبعة معاك الدرس اول باول
ارجاء من الاخوة المراقبين ترشيح الموضوع
انا حاولت
لكن يطلع لي البلاغ عن مشاركة سيئة
ممكن ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
شكرا اخي الحبيب لمين على هذا الدرس
المشاركة الأصلية كتبت بواسطة حبيبة الشيخ
لا شكر على واجب
انشاء الله استمر في الدروس
طايما اني في احلا منتدي في العالم
واحلا اعضاء
اشكرك على هذا الكلام الطيب
يا ريت لو يرشحوا هذا الموضوع
لكن انا اترك ذلك لتقييم الاخوة المراقبين
شكرا اختي العزيزة
حبيبة الشيخ
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان
في الدرس السابق تعلمنا طرق انشاء وربط قاعدة البيانات .
وسوف نستمر بإذن الله خلال هذا الدرس في اكمال التعامل مع قواعد البيانات 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 .
* في الدرس الأخـــر سوف يكون ملف مرفق على جميع العمليات خلال الدروس بإذن الله .
والسلام عليكم ورحمة الله وبركاته .
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان
رائع فعلا رائع
لم سعني الوقت لقرائة الدرس كاملا
لكن حين ارجع سأقرأه باذن الله
شكرا جزيلا لك
بالتوفيق
شبكة قانوني الاردن
نسعى معا للرقي بالمهنة القانونية في الاردن
www.lawjo.net
-----------------------------------------
e_amawi (at) yahoo.com
شكرا على المرورالمشاركة الأصلية كتبت بواسطة amawi
انا مستيك لما تقرا الموضوع
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان
السلام عليكم
بارك الله فيك على هذا الموضوع
درس مفيد افادك الله
المشاركة الأصلية كتبت بواسطة سر العرب
شكرا
على هذا الرد الجميل
يا اخي سر العرب
لتمني ان تستفيد من الموضوع
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان
السلام عليكم
انا اسفة على التاخر
لكن درس رائع
انا الان اطبقه على الجهاز عندي
بارك الله فيك
وعليكم السلام
شكرا جزيلا على هذا الرد
اتمني انك تطبقيه زين
شكرا على المرور
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان
في الدرس السابق تعلمنا طرق انشاء وربط قاعدة البيانات .
وكيفية التعامل معها .
في هذا الدرس سوف نتعرف على أحد اشهر أنواع جداول العرض ،
وهو 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 ،
الاحداث ، وكيفية وضع القيم المختلفة داخل الجدول .
في الدرس القادم سوف نقوم بعمل بحث على القيم الموجودة في قاعدة البيانات .
والسلام عليكم ورحمة الله وبركاته .
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان
بارك الله فيك اخي الحبيب لمين على هذا الجهر الرائع والمشرف
اتمني من الاخوة الكرام المراقبين تثبيت هذا الموضوع
انا من الحاضرين المتابعين لهذه السلسلة
القيمة
المشاركة الأصلية كتبت بواسطة سر العرب
اهلا اخي سر العرب
اشكرك على هذه المشاركة
انشاء الله يكون فيه المزيد من الدروس
الاكثر افادة
لكل شيئ إذا ماتم نقصان فلا يغتر بطيب العيش إنسان