15-10-12, 08:28 AM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
البحث عن البضائع .
سنحاول بإذن الله خلال هذه الدروس اتمام عملية البحث الموجودة في القائمة ، وسوف نقوم بجعل المستخدم يتحكم في كامل شروط البحث .
نحتاج في هذه الشاشة إلى زر للبحث ، زر لاغلاق الشاشة ، أداة جدول لعرض النتائج ، مربع نص لكتابة قيمة البحث .
السلام عليكم ورحمة الله وبركاته .
البحث عن البضائع .
سنحاول بإذن الله خلال هذه الدروس اتمام عملية البحث الموجودة في القائمة ، وسوف نقوم بجعل المستخدم يتحكم في كامل شروط البحث .
نحتاج في هذه الشاشة إلى زر للبحث ، زر لاغلاق الشاشة ، أداة جدول لعرض النتائج ، مربع نص لكتابة قيمة البحث .
اضافة لذلك نحتاج إلى
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 تكون مهمته تكوين جملة الاستعلام ، ومن أجل ذلك يصبح كود الحدث بالشكل التالي :
سنزيله ، ونستدعي بدلاً منه حدثاً اسمه 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]
يتبع ...