تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الثاني والعشرون - البحث عن البضائع
#1
كاتب الموضوع : أحمد جمال

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

البحث عن البضائع .


سنحاول بإذن الله خلال هذه الدروس اتمام عملية البحث الموجودة في القائمة ، وسوف نقوم بجعل المستخدم يتحكم في كامل شروط البحث .


نحتاج في هذه الشاشة إلى زر للبحث ، زر لاغلاق الشاشة ، أداة جدول لعرض النتائج ، مربع نص لكتابة قيمة البحث .

اضافة لذلك نحتاج إلى
Combo1 لنحدد هل نريد البحث في الاسم ، المصنع ، الكمية ... الخ ، وأيضاً Combo2 لنعرف شرط البحث - في الحالة الرقمية - أكبر من ، أصغر من ، = .

سنجعل هذا الفورم MDICHild ، وفي أمر اظهاره في الفورم الرئيسي سنكتب :


كود :
[align=right]If T1.RecordCount = 0 Then
MsgBox "لا توجد أي بضائع للبحث عنها ، لاضافة بضاعة جديدة اختر اضافة - اضافة بضاعة", vbExclamation + arabic, "عرض البضائع"
Exit Sub
End If

Frm_Find.Show[/align]
والآن سننشأ حدث Create_Flex والذي ستكون مهمته تكوين الجدول ، وهو نفس الكود الذي قمنا بكتابته في Frm_Show دون أي تغيير ، اللهم ما عدا أن السطر التالي :


كود :
[align=right]MSFlexGrid1.Rows = T4.RecordCount + 1[/align]
سيتحول إلى :


كود :
[align=right]On Error Resume Next
MSFlexGrid1.Rows = T4.RecordCount + 1
If Err = 3420 Then
MSFlexGrid1.Rows = 2
End If[/align]
وسبب هذا أننا سنستدعي الأمر في حالة كون القاعدة مغلقة مما يسبب الخطأ رقم 3420 ، وهذا الكود لعدم اظهار رسالة خطأ .
وبهذا يصبح الكود الكامل :


كود :
[align=right]Sub Create_Flex()
MSFlexGrid1.Clear
MSFlexGrid1.Cols = 8
On Error Resume Next
MSFlexGrid1.Rows = T4.RecordCount + 1
If Err = 3420 Then
MSFlexGrid1.Rows = 2
End If
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "ت"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "رقم"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = " اسم البضاعة"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = "النوع"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = "المصنع"
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = "السعر"
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = "العدد"
MSFlexGrid1.Col = 7
MSFlexGrid1.Text = "وحدة/صندوق"

MSFlexGrid1.ColAlignment(0) = 5
MSFlexGrid1.ColAlignment(1) = 5
MSFlexGrid1.ColAlignment(2) = 3
MSFlexGrid1.ColAlignment(3) = 5
MSFlexGrid1.ColAlignment(4) = 5
MSFlexGrid1.ColAlignment(5) = 5
MSFlexGrid1.ColAlignment(6) = 5
MSFlexGrid1.ColAlignment(7) = 5

MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 500
MSFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.ColWidth(3) = 1500
MSFlexGrid1.ColWidth(4) = 1500
End Sub[/align]

من أجل هذا سنكتب في حدث Form_Load :


كود :
[align=right]Me.Width = 5625
Me.Height = 5400
Me.Left = ((MDIForm1.Width - Me.Width) / 2)
Me.Top = ((MDIForm1.Height - Me.Height) / 2) - 40
Me.Show

Create_Flex[/align]
ومن ثم نضيف العناصر المناسبة إلى Combo1 و Combo2 :



كود :
[align=right]Combo1.AddItem "اسم البضاعة"
Combo1.AddItem "النوع"
Combo1.AddItem "المورد - المصنع"
Combo1.AddItem "الكمية"
Combo1.AddItem "السعر"

Combo2.AddItem "<"
Combo2.AddItem ">"
Combo2.AddItem "="

Combo1.ListIndex = 0[/align]
والآن لنر أمراً ما ، ففي حالة اختار المستخدم البحث عن اسم البضاعة أو المصنع أو النوع فليس ثم خيار من


Combo2 إلا (=) لأن البيانات في هذه الحالة نصية فلن نستخدم < و > .

من أجل هذا نكتب الأمر التالي في حدث Combo1_Click :



كود :
[align=right]If Combo1.ListIndex <> 3 And Combo1.ListIndex <> 4 Then
Combo2.ListIndex = 2
Combo2.Enabled = False
Else
Combo2.Enabled = True
End If[/align]
الحدث الثاني الذي سننشأه هو حدث Refresh_Me ، ولن نغير في الحدث الموجود في Frm_Show إلا نقطتين رئيسيتين :
* النقطة الأولى : سنزيل كل الأوامر التي كانت مخصصة لتعبئة القائمة بالبيانات .
* النقطة الثانية : سنغير جملة الاستعلام .


لو نتذكر أمر الاستعلام السابق :



كود :
[align=right]SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset[/align]
)



سنزيله ، ونستدعي بدلاً منه حدثاً اسمه Search تكون مهمته تكوين جملة الاستعلام ، ومن أجل ذلك يصبح كود الحدث بالشكل التالي :



كود :
[align=right]Public Sub Refresh_Me()
Call Search

Create_Flex
If T4.RecordCount = 0 Then Exit Sub

Frm_Wait.Show
Frm_Wait.ProgressBar1.Max = T1.RecordCount
Frm_Wait.ProgressBar1.Min = 0
Frm_Wait.ProgressBar1.Value = 0

T4.MoveLast
T4.MoveFirst
Create_Flex

If T4.RecordCount <> 0 Then
T4.MoveFirst
For I = 0 To T4.RecordCount - 1
Frm_Wait.ProgressBar1.Value = Frm_Wait.ProgressBar1.Value + 1
DoEvents
MSFlexGrid1.Row = I + 1
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = T4.Fields("tb_product.Number")
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = T4.Fields("tb_product.name")
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = T4.Fields("tb_category.name")
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = T4.Fields("tb_factory.name")
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = T4!price
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = T4.Fields("Count")
MSFlexGrid1.Col = 7
MSFlexGrid1.Text = T4!Box_count

T4.MoveNext
Next I

MSFlexGrid1.Col = 2
MSFlexGrid1.Sort = 7


MSFlexGrid1.Col = 0
For I = 0 To T4.RecordCount - 1
MSFlexGrid1.Row = I + 1
MSFlexGrid1.Text = I + 1
Next I
End If

T4.Close

Unload Frm_Wait
End Sub[/align]
يتبع ...
}}}
تم الشكر بواسطة:
#2
والآن سنرى كيف نقوم بعمل أمر

Search .
في البداية تعتمد جملة الاستعلام على المحدد من Combo1 لذا سنقوم بعمل جملة Select بالشكل التالي :



كود :
[align=right]Select Case Combo1.ListIndex
Case 0

Case 1

Case 2

Case 3

Case 4

End Select
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)[/align]
وجميع جمل الاستعلام ستنبى على الجملة الاساسية التي كانت بالشكل التالي :



كود :
[align=right]SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number"[/align]
إلا أننا سنضيف شرط البحث في آخر هذه الجملة .
من أجل ذلك تكون جملة البحث عن


Name أي الحالة الأولى :



كود :
[align=right]SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number and tb_product.name='" & Text1.Text & "'"[/align]
* لاحظ أننا لا بد أن نكتب tb_product.name= لأن الاسم الذي نبحث عنه هو اسم البضاعة من Tb_Product .


والحالة الثانية أي البحث عن النوع :


كود :
[align=right]SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number and tb_category.name='" & Text1.Text & "'"[/align]
* لاحظ أننا هنا بحثنا عن Name ولكنه من جدول الأنواع .


والحالة الثالثة أي حالة البحث عن المصنع :


كود :
[align=right]SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number and tb_factory.name='" & Text1.Text & "'"[/align]
أما الحالتين الأخريتين فليس الشرط (=) هو الموجود دائماً ، بل إنه يمكن أن يكون < أو > ، وهذا يعتمد على قيمة Combo2 ، ولهذا تكون جملة الاستعلام في الحالة الرابعة :



كود :
[align=right]SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number and count" & Combo2.Text & Val(Text1.Text)[/align]
وفي الحالة الأخيرة تكون جملة الاستعلام :



كود :
[align=right]SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number and price" & Combo2.Text & Val(Text1.Text)[/align]


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



الملفات المرفقة
.zip   prog18.zip (الحجم : 189.1 ك ب / التحميلات : 156)
}}}
تم الشكر بواسطة: أبو البراء الجزائري


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الرابع والثلاثون والأخير - نبذة عن العملية العكسية + تجهيز البرنامج على Cd RaggiTech 0 11,113 15-10-12, 09:10 AM
آخر رد: RaggiTech
  الدرس الثالث والثلاثون - كيفية عمل اعداد Setup للبرنامج RaggiTech 0 3,979 15-10-12, 09:08 AM
آخر رد: RaggiTech
  الدرس الثاني والثلاثون - التحويل إلى exe RaggiTech 0 4,065 15-10-12, 09:07 AM
آخر رد: RaggiTech
  الدرس الحادي والثلاثون - تعددية المستخدمين - البحث وطباعة الفواتير - التعليمات ... RaggiTech 2 4,952 15-10-12, 09:05 AM
آخر رد: RaggiTech
  الدرس الثلاثون - التعامل مع شريط الأدوات ToolBar RaggiTech 0 3,823 15-10-12, 08:59 AM
آخر رد: RaggiTech
  الدرس التاسع والعشرون - التعامل مع أشرطة الحالة Statues Bar RaggiTech 0 3,602 15-10-12, 08:57 AM
آخر رد: RaggiTech
  الدرس الثامن والعشرون -الطباعة في البرنامج . RaggiTech 4 5,294 15-10-12, 08:56 AM
آخر رد: RaggiTech
  الدرس السابع والعشرون - مقدمة إلى التعامل مع التقارير من خلال DataReport RaggiTech 2 6,107 15-10-12, 08:45 AM
آخر رد: RaggiTech
  الدرس السادس والعشرون - التقارير اليومية ، والتقارير بين تاريخين RaggiTech 1 4,347 15-10-12, 08:39 AM
آخر رد: RaggiTech
  الدرس الخامس والعشرون - الإحصائيات والرسوم البيانية RaggiTech 0 3,766 15-10-12, 08:37 AM
آخر رد: RaggiTech

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


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