15-10-12, 07:59 AM
[b]التعديل .
[/b]
من أجل التعديل سوف نقوم بانشاء شاشة جديدة ، ولكنها ليست من Child الفورم الرئيسي ذلك أننا نريد أن نظهرها بالتعليمة Show 1 حتى ينهي التعديل قبل العودة للتحكم ثانية .
قم بتصميم الفورم كما يحلو لك مع مراعاة احتواءه على كافة الحقول ما عدا حقل الرقم فقط . واضف زرين للتعديل ، ولالغاء الأمر .
ولا تنس ضبط خواص TabIndex لمزيد من السهولة في الاستخدام .
وأخيراً قم بتسميته Frm_Edit .
لا تنس أمراً هاماً جداً ، وهو أن حقلي المصنع والنوع سوف يظهران على هيئة قائمة بها كل المصانع والأنواع لتسهيل عملية الاختيار .
لا تنس أن تضع مكان أو متغير لتحتفط فيه برقم البضاعة التي يتم تعديلها من أجل عملية التعديل لاحقاً .
ولا تنس أخيراً أن تجعل MaxLength لحقل الاسم 30 للتوافق مع قاعدة البيانات ، أما الارقام فاجعلها = 10 كحد أقصى .
وبعد أن قمنا بتصميم الشاشة ، سوف نقوم بتصميم حدث البداية لها Form_Load والذي سيتضمن وضع جميع المصانع والأنواع المتوفرة في القائمتين Combo1 و Combo2 .
والآن إلى أمر تشغيل هذا الفورم ، فسوف نقوم بتشغيله ومن ثم ننقل القيم الحالية إلى اماكنها المناسبة في فورم التعديل . ولا تنس أن تحتفظ بالنوع والمصنع القديمين والتأكد من عدم خلوهما من البضائع - كما هو الأمر في عملية الحذف تماماً .
إذا قمنا بالضغط على ( الغاء الأمر ) في فورم التعديل فلن يكون أكثر من اغلاق الفورم :
أما إذا ضغطنا على زر التعديل فتنتظرنا جملة استعلام لعملية التعديل .
وأولاً علينا أن نعرف ما هو رقم البضاعة ، ولو لاحظت في البرنامج أنني اخزن رقم البضاعة في أداة تحتوي قبل الرقم على no. ولذا يمكنني استخلاص الرقم بالطريقة التالية :
مبدئياً تأكد من أن الاسم الجديد ليس مطابقاً لأحد الأسماء القديمة ، وبالتالي ينبغي ألا يكون له عدد ، غير نفس البضاعة طبعاً .
ثم لا تنس أن تعرف رقم المصنع والنوع الجديدين ، فالرقم هو من ستخزنه في جدول البضائع لا الاسم .
وأخيراً ... قم بعملية التعديل .
قم بتصميم الفورم كما يحلو لك مع مراعاة احتواءه على كافة الحقول ما عدا حقل الرقم فقط . واضف زرين للتعديل ، ولالغاء الأمر .
ولا تنس ضبط خواص TabIndex لمزيد من السهولة في الاستخدام .
وأخيراً قم بتسميته Frm_Edit .
لا تنس أمراً هاماً جداً ، وهو أن حقلي المصنع والنوع سوف يظهران على هيئة قائمة بها كل المصانع والأنواع لتسهيل عملية الاختيار .
لا تنس أن تضع مكان أو متغير لتحتفط فيه برقم البضاعة التي يتم تعديلها من أجل عملية التعديل لاحقاً .
ولا تنس أخيراً أن تجعل MaxLength لحقل الاسم 30 للتوافق مع قاعدة البيانات ، أما الارقام فاجعلها = 10 كحد أقصى .
وبعد أن قمنا بتصميم الشاشة ، سوف نقوم بتصميم حدث البداية لها Form_Load والذي سيتضمن وضع جميع المصانع والأنواع المتوفرة في القائمتين Combo1 و Combo2 .
كود :
T2.MoveFirst
T3.MoveFirst
Combo1.Clear
Combo2.Clear
For i = 0 To T2.RecordCount - 1
Combo1.AddItem T2!Name
T2.MoveNext
Next i
For i = 0 To T3.RecordCount - 1
Combo2.AddItem T3!Name
T3.MoveNext
Next iكود :
Dim A1, A2
SQL = "select number from tb_category where name='" & Text2.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
A1 = T4!Number
SQL = "select number from tb_factory where name='" & Text3.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
A2 = T4!Number
Load Frm_Edit
With Frm_Edit
.Text1.Text = Text1.Text
.Combo1.Text = Text2.Text
.Combo2.Text = Text3.Text
.Text2.Text = Text4.Text
.Text3.Text = Text5.Text
.Text4.Text = Text6.Text
.lbl_name = "تعديل البضاعة : " & Text1.Text
.lbl_num = "no." & Text7.Text
End With
Frm_Edit.Show 1
T2.MoveFirst
For i = 0 To T2.RecordCount - 1
If T2!Number = A1 Then Exit For
T2.MoveNext
Next i
T3.MoveFirst
For i = 0 To T3.RecordCount - 1
If T3!Number = A2 Then Exit For
T3.MoveNext
Next i
If T2!View = False Then
SQL = "select count(*) as mycount from tb_product where category=" & A1 & ""
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
If T4!mycount = 0 Then T2.Delete
T4.Close
End If
If T3!View = False Then
SQL = "select count(*) as mycount from tb_product where factory=" & A2 & ""
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
If T4!mycount = 0 Then T3.Delete
T4.Close
End If
Refresh_Meكود :
Unload Meوأولاً علينا أن نعرف ما هو رقم البضاعة ، ولو لاحظت في البرنامج أنني اخزن رقم البضاعة في أداة تحتوي قبل الرقم على no. ولذا يمكنني استخلاص الرقم بالطريقة التالية :
كود :
Dim My_Number
My_Number = Mid(lbl_num.Caption, 4, Len(lbl_num.Caption))مبدئياً تأكد من أن الاسم الجديد ليس مطابقاً لأحد الأسماء القديمة ، وبالتالي ينبغي ألا يكون له عدد ، غير نفس البضاعة طبعاً .
كود :
SQL = "select * from tb_product where name='" & Text1.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
If T4.RecordCount <> 0 Then
If T4!Number <> Val(My_Number) Then
MsgBox "توجد بضاعة لها نفس الاسم ، فضلاً اختر اسماً آخر", vbExclamation + arabic, "تعديل بضاعة"
Exit Sub
End If
End Ifكود :
Dim Num1, Num2
SQL = "select number from tb_category where name='" & Combo1.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
Num1 = T4!Number
T4.Close
SQL = "select number from tb_factory where name='" & Combo2.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)
Num2 = T4!Number
T4.Closeوأخيراً ... قم بعملية التعديل .
ومجددأ ظهرت لدي مشاكل مع لغة الاستعلامات الهيكلية ومع الأمر
Update تحديدأ ، لذا اضطررت إلى استخدام تلك الطريقة التي استخدمتها في الحذف وذلك للتعديل :
كود :
T1.MoveFirst
For i = 0 To T1.RecordCount - 1
If T1!Number = Val(My_Number) Then Exit For
T1.MoveNext
Next i
With T1
.Edit
!Name = Text1.Text
!category = Num1
!factory = Num2
!price = Val(Text2.Text)
!Count = Val(Text3.Text)
!Box_count = Val(Text4.Text)
.Update
End Withكود :
If KeyAscii > 58 Or KeyAscii < 48 Then
KeyAscii = 0
End Ifكود :
If (KeyAscii > 58 Or KeyAscii < 48) And KeyAscii <> 46 And KeyAscii <> 8 Then
KeyAscii = 0
End Ifحيث أن رقم آسكي للأعداد يتراوح بين هذين العددين .
ولكننا سنحتاج لبعض الاستثناءات فرقم 8 يمثل عملية BackSpace كما أن 46 يمثل الفاصلة ، لذلك سوف نستثيهما :
كود :
If T4!View = False Then MsgBox "لا تنس أنك اخترت مورداً سبق لك حذفه وهو موجود بصورة مؤقتة حتى انتهاء البضائع من نفس المورد", vbExclamation + arabic, "مورد محذوف"أخيراً ، كنا في شاشة التعديل عندما نشغل الفورم نضيف جميع المصانع والأنواع ، ومن ضمنها بعض المصانع المحذوفة ( شرحنا كيفية ذلك في بداية الدروس ) ولذا إذا اختار مصنعاً أو مورداً محذوفاً فسنذكره بذلك قبل عملية التعديل :
كود :
If T4!View = False Then MsgBox "لا تنس أنك اخترت نوعاً سبق لك حذفه وهو موجود بصورة مؤقتة حتى انتهاء البضائع من نفس النوع", vbExclamation + arabic, "نوع محذوف"كود :
If T4!View = False Then MsgBox "لا تنس أنك اخترت نوعاً سبق لك حذفه وهو موجود بصورة مؤقتة حتى انتهاء البضائع من نفس النوع", vbExclamation + arabic, "نوع محذوف"والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
والسلام عليكم ورحمة الله وبركاته .
