منتدى برامج نت | برامج نت | دليل المواقع | العاب فلاش | برامج | عيادة الطب | Free software
العاب افلام موقع منتديات

المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : برمجة Dao من خلال فيجوال بيسك (2/4)


mido_kholy
10-11-2006, 07:14 PM
بسم الله الرحمن الرحيم .

المقدمة :في الدرس السابق تعلمنا طرق انشاء وربط قاعدة البيانات .
وسوف نستمر بإذن الله خلال هذا الدرس في اكمال التعامل مع قواعد البيانات 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 .

* في الدرس الأخير سوف يكون ملف مرفق على جميع العمليات خلال الدروس بإذن الله .

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

mido_kholy
10-12-2006, 01:42 PM
مش مهم الردود المهم الاستفادة من الدروس

veto_44
10-12-2006, 08:25 PM
مش مهم الردود المهم الاستفادة من الدروس

بارك الله فيك اخي ميدو تفكير سليم ومنطق رائع منك
لان اهم شيء الاستفادة من المواضيع وليس مهما كتابة الردود
الاجر لك من الله جزاك الله خيرا على كل جهودك معنا
بالمنتدى اشد على يدك وادعوك للاستمرار ولا تمل ابدا
من فعل الخير واغتنم الشهر الفضيل بذلك ادعو لك دائما
بالخير ولك مني خالص التقدير والاحترام .