تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الثاني عشر - تصميم شاشة عرض البضائع - الحذف والتعديل
#2
[b]التعديل .

[/b]
من أجل التعديل سوف نقوم بانشاء شاشة جديدة ، ولكنها ليست من Child الفورم الرئيسي ذلك أننا نريد أن نظهرها بالتعليمة Show 1 حتى ينهي التعديل قبل العودة للتحكم ثانية .

قم بتصميم الفورم كما يحلو لك مع مراعاة احتواءه على كافة الحقول ما عدا حقل الرقم فقط . واضف زرين للتعديل ، ولالغاء الأمر .
ولا تنس ضبط خواص 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
وسنضع هذا الأمر في حدث KeyPress الذي يمثل ضغطة المفاتيح .

حيث أن رقم آسكي للأعداد يتراوح بين هذين العددين .
ولكننا سنحتاج لبعض الاستثناءات فرقم 8 يمثل عملية BackSpace كما أن 46 يمثل الفاصلة ، لذلك سوف نستثيهما :



كود :
If T4!View = False Then MsgBox "لا تنس أنك اخترت مورداً سبق لك حذفه وهو موجود بصورة مؤقتة حتى انتهاء البضائع من نفس المورد", vbExclamation + arabic, "مورد محذوف"
هذه الطريقة هي أبسط الطرق وأسهلها ، لكنها لا تفيد في حالة قام المستخدم بلصق الرقم باستخدام الماوس ، كما أنها تمنع بعض العمليات المفيدة مثل النقر على Ctrl+V للصق Paste ، Ctrl+X للقص Cut .

أخيراً ، كنا في شاشة التعديل عندما نشغل الفورم نضيف جميع المصانع والأنواع ، ومن ضمنها بعض المصانع المحذوفة ( شرحنا كيفية ذلك في بداية الدروس ) ولذا إذا اختار مصنعاً أو مورداً محذوفاً فسنذكره بذلك قبل عملية التعديل :


كود :
If T4!View = False Then MsgBox "لا تنس أنك اخترت نوعاً سبق لك حذفه وهو موجود بصورة مؤقتة حتى انتهاء البضائع من نفس النوع", vbExclamation + arabic, "نوع محذوف"
و


كود :
If T4!View = False Then MsgBox "لا تنس أنك اخترت نوعاً سبق لك حذفه وهو موجود بصورة مؤقتة حتى انتهاء البضائع من نفس النوع", vbExclamation + arabic, "نوع محذوف"

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الدرس الثاني عشر - تصميم شاشة عرض البضائع - الحذف والتعديل - بواسطة Raggi Tech - 15-10-12, 07:59 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الرابع والثلاثون والأخير - نبذة عن العملية العكسية + تجهيز البرنامج على Cd RaggiTech 0 13,821 15-10-12, 09:10 AM
آخر رد: RaggiTech
  الدرس الثالث والثلاثون - كيفية عمل اعداد Setup للبرنامج RaggiTech 0 4,308 15-10-12, 09:08 AM
آخر رد: RaggiTech
  الدرس الثاني والثلاثون - التحويل إلى exe RaggiTech 0 4,341 15-10-12, 09:07 AM
آخر رد: RaggiTech
  الدرس الحادي والثلاثون - تعددية المستخدمين - البحث وطباعة الفواتير - التعليمات ... RaggiTech 2 5,309 15-10-12, 09:05 AM
آخر رد: RaggiTech
  الدرس الثلاثون - التعامل مع شريط الأدوات ToolBar RaggiTech 0 4,192 15-10-12, 08:59 AM
آخر رد: RaggiTech
  الدرس التاسع والعشرون - التعامل مع أشرطة الحالة Statues Bar RaggiTech 0 3,884 15-10-12, 08:57 AM
آخر رد: RaggiTech
  الدرس الثامن والعشرون -الطباعة في البرنامج . RaggiTech 4 5,769 15-10-12, 08:56 AM
آخر رد: RaggiTech
  الدرس السابع والعشرون - مقدمة إلى التعامل مع التقارير من خلال DataReport RaggiTech 2 6,607 15-10-12, 08:45 AM
آخر رد: RaggiTech
  الدرس السادس والعشرون - التقارير اليومية ، والتقارير بين تاريخين RaggiTech 1 4,736 15-10-12, 08:39 AM
آخر رد: RaggiTech
  الدرس الخامس والعشرون - الإحصائيات والرسوم البيانية RaggiTech 0 4,041 15-10-12, 08:37 AM
آخر رد: RaggiTech

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


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