اذهب الي المحتوي
أوفيسنا

طرق فرز وتصفية البيانات للنماذج ، وتصفية التقارير


jjafferr

الردود الموصى بها

السلام عليكم:smile:

 

تم طرح عدة اسئلة عن طريقة فرز او تصفية بيانات النموذج ، وسأقوم هنا بشرح الطريقتين:

 

1. إما عن طريق الاستعلام ، وهذا الرابط يعطينا المثال (والرجاء قراءته بتريث وتمعن وبالتفصيل) :

 

2. وإما عن طريق النموذج ، فميزتها:

أ- انك تستطيع عمل تصفيه/تصفيات اضافية على النموذج او التقرير ، بعد تصفية الاستعلام ،

ب- الاكسس سيعطيك الكود:smile:

 

وسأشرح هنا كيفية عمل تصفية بيانات النموذج (وبنفس الطريقة يمكن عمل اكثر من تصفية ، وعمل فرز كذلك) :

 

سأستعين بمرفق السؤال التالي للأخ محمد ، وبعد طلبت إذنه:smile:

 

1. قاعدة البيانات يجب ان تسمح لها ان تكون في وضع Layout View (هذا فقط حتى نتعلم الطريقة ، ويمكن الغاءه فيما بعد) ،

Form_Filter_Clipboard01.jpg.168cc7781bc4dfdce202fc272a6a90ca.jpg

.

2. النموذج يجب ان يكون غير منبثق 

Form_Filter_Clipboard02.jpg.44050082bcd7d7c4bbe0b5a336e4405f.jpg

.

3. هذا النموذج الذي نريد ان نعمل له تصفية بين تاريخين للحقل Date

Form_Filter_Clipboard03.jpg.3a6cd6811b6e7f655dbe26770e079cbf.jpg

.

4. الهدف النهائي هو استخدام هذا الحقل لإدخال تاريخ معين ، ثم الضغط على زر "تصفية بين تاريحين" للقيام بالتصفية

Form_Filter_Clipboard03.1.jpg.6a6d35bc192bfd6732b92f1fe5fa8c07.jpg

.

5. طريقة العمل:

أ. بزر الفأرة اليمين نضغط في بيانات حقل التاريخ Date ، 

ب. ونختار تصفية التاريخ (السبب ان الاكسس اعطانا تصفية التاريخ هو لأن الحقل حقل تاريخ ، فلو كان الحقل نص او رقم لأعطانا الاكسس خيارات اخرى) ،

ج. ونختار بين تاريخين (طبعا يمكنك اختيار اي من الاختيارات الاخرى ، وهذا يعتمد على التصفية التي تريد القيام بها)

Form_Filter_Clipboard04.jpg.b9dbb520592a46f65f108adf6b30f66c.jpg

.

د. تخرج لنا نافذة تطلب إدخال التاريخين (ويمكننا ادخال التاريخ بعدة طرق) ، وحسب اختيارنا ، والنتيجة المفروض ان نراها بعد التصفية هي السجلات بالاسهم الحمراء فقط

Form_Filter_Clipboard05.jpg.d3e981f69645e01d308787a249ba6187.jpg

.

هـ. وهذه نتيجة التصفية اعلاه بين تاريخين

Form_Filter_Clipboard06.jpg.9bf5758cf035ad7cc4840a14ce0c351f.jpg

.

ح. والآن الى شرح كيفية الاستفادة مما عملناه اعلاه وتطبيقه في كود ،

ننتقل بالنموذج الى وضع Layout View

Form_Filter_Clipboard07.jpg.72fa736c111f370645c49b57f60dbc9b.jpg

.

ط. ونضغط بالفأرة اليسار على النموذج الفرعي الذي عملنا عليه التصفية ،

ي. ثم ننظر في اعدادات النموذج ، الى ان نصل الى التصفية ، فنرى الكود الذي استعمله الاكسس للقيام بالتصفية ، فنعمل له نسخ ،

ومثل ما اشرت اعلاه ، يمكننا اضافة اكثر من تصفية لأكثر من حقل ، ويمكن عمل فرز لحقل آخر ، ثم نرى الكود جاهزا هنا

Form_Filter_Clipboard08.jpg.4c8032f6c9185fb5e0c3480f29c6a85d.jpg

.

ك. هذا الزر الذي سننقر عليه للقيام بالتصفية

Form_Filter_Clipboard09.jpg.463e27c699863bbb7731731dc46410bc.jpg

.

ل. فنعمل الحدث على نقر الزر ، ثم نلصق الكود السابق ،

ونقوم بتعديل التواريخ بما يناسب طلبنا ، وهو التصفية بين: تاريخ الحقل DateX و تاريخ الحقل DateX ناقصا 65 يوم ،

او كما بالتواريخ في الملاحظات (باللون الاخضر في الكود)

(ملاحظة مهمة للعلم: الاكسس يستخدم نظام التاريخ الامريكي في جميع عملياته ، والتاريخ الامريكي هو شهر/يوم/سنة ، كما نرى في كود التصفية)

Form_Filter_Clipboard010.jpg.89459f03654e98106d1d668af673c2a3.jpg

.

م. وهنا نرى نتيجة النقر على زر "تصفية بين تاريخين" ، والذي يستعمل الكود اعلاه

Form_Filter_Clipboard011.jpg.ad792e11453b90e69e100198e14c7547.jpg

.

 

******************************************

اما اذا اردنا عمل استبعاد معلومة مثل "الاسكندرية" من قائمة Country

Form_Filter_Clipboard012.jpg.fa653abd389c60efcb83eb686d48ac49.jpg

.

فيصبح الكود

Form_Filter_Clipboard013.jpg.a3d58f3f3fd41077d689a4b653725a96.jpg

.

**************************

الآن سنقوم بعمل اكثر من تصفية ، فرز بين تاريخين واستبعاد "الاسكندرية"

فرزنا بين التاريخين ، وكانت نتيجته هكذا

Form_Filter_Clipboard011.jpg.a9836e1ed6d8ef3c96cedca16bc03cdb.jpg

.

واستبعاد معلومة مثل "الاسكندرية" من قائمة Country

Form_Filter_Clipboard012.jpg.6ad0e467f55681c880fb677fc2ee8e8c.jpg

.

فيصبح كود التصفية هكذا

Form_Filter_Clipboard014.jpg.392689df4c91892cf78a4b8572100cc9.jpg

.

والآن الى الكود الذي يضم هذه التصفيات:

يجب ان نعرف اننا نتعامل مع مجموعة مختلفة من انواع الحقول ، وكل نوع له طريقة في عمل الكود ،

فالسطر الاول هو تاريخ ، 

والسطر الثاني للنص ،

ووضعت مثال في آخر سطر لحقل الرقم

    Dim City As String
    
    City = "اسكندرية"
    
	'للتاريخ
    myCriteria = "([testQ].[datex] between #" & Me.DateX & "# and #" & Me.DateX - 65 & "#)"
	'للنص
    myCriteria = myCriteria & " AND ([testQ].[country1]<> '" & City & "'"
    myCriteria = myCriteria & " or [testQ].[country1] is null)"
	'للرقم
	'myCriteria = myCriteria & " AND [testQ].[ID]<> " & Me.ID
    
    Me.TestF.Form.Filter = myCriteria
    Me.TestF.Form.FilterOn = True

 

 

***********************************

كيف نعرف ان النموذج به تصفية:

عند عمل التصفية في النموذج (وليس من الاستعلام) ، ستلاحظ ان النموذج يخبرك انك عملت تصفية ، هكذا بالتظليل الاصفر:

Form_Filter_Clipboard015.jpg.e791539d7f0da4438ac0248215953d51.jpg

.

ولإزالة التصفية ، يجب عليك النقر على احد هذين المكانين المظللين بالاصفر ، او عمل زر:

Form_Filter_Clipboard016.jpg.6f8f811890b518a50bde4ce6384aafb1.jpg

.

والكود على نقر الزر سيكون:

    Me.TestF.Form.Filter = ""
    Me.TestF.Form.FilterOn = False

 

جعفر

 

660.2.Test2006.mdb.zip

  • Like 9
رابط هذا التعليق
شارك

جزاك الله خير استاذى جعفر
استأذنك بشى صغير
 

 Dim City As String
    
    City = "اسكندرية"
    
	'للتاريخ
    myCriteria = "([testQ].[datex] between #" & Me.DateX & "# and #" & Me.DateX - 65 & "#)"
	'للنص
    myCriteria = myCriteria & " AND ([testQ].[country1]<> '" & City & "'"
    myCriteria = myCriteria & " or [testQ].[country1] is null)"
	'للرقم
	'myCriteria = myCriteria & " AND [testQ].[ID]<> " & Me.ID
    
    Me.TestF.Form.Filter = myCriteria
    Me.TestF.Form.FilterOn = True

بدل أن نقول لا اسكندرية 
<> اسكندرية 

كيف نكتب 
 

Is Null Or "اسكندرية " Or "الدقهلية"


وجزاكم الله خيرا 

تم تعديل بواسطه محمد احمد لطفى
رابط هذا التعليق
شارك

وعليكم السلام:smile:

 

المفروض ان الاكسس يعطيك كود مثل هذا:

([testQ].[datex] between #01-Jul-17# and #27-Apr-17#) AND ([testQ].[country1]= 'اسكندرية' or [testQ].[country1]= 'الدقهلية' or [testQ].[country1] is null)

 

اليك الكود ، وقد فككته الى اصغر مكوناته:smile:

وانت اعمل المدرسة 

    Dim City As String
    
    City = "اسكندرية"
    City2 = "الدقهلية"
    
    'مجموعة اوامر الحقل الاول
    'للتاريخ
    myCriteria = "("
    myCriteria = myCriteria & "[testQ].[datex] between #" & Me.DateX & "# and #" & Me.DateX - 65 & "#"
    myCriteria = myCriteria & ")"
    
    
    'مجموعة اوامر الحقل الثاني
    myCriteria = myCriteria & " AND "
    myCriteria = myCriteria & "("
    'للنص
    myCriteria = myCriteria & "[testQ].[country1]= '" & City & "'"
    myCriteria = myCriteria & " or "
    myCriteria = myCriteria & "[testQ].[country1]= '" & City2 & "'"
    myCriteria = myCriteria & " or "
    myCriteria = myCriteria & "[testQ].[country1] is null"
    myCriteria = myCriteria & ")"
    
    
    'للرقم
    'myCriteria = myCriteria & " AND "
    'myCriteria = myCriteria & "[testQ].[ID]<> " & Me.ID
    
    'Debug.Print myCriteria
    Me.TestF.Form.Filter = myCriteria
    Me.TestF.Form.FilterOn = True
  

 

جعفر

  • Like 2
رابط هذا التعليق
شارك

أخي محمد:smile:

 

الربكة عندك في And و Or ، فرجاء مراجعة عملهم بالضبط.

 

رجاء عمل التالي:

1. وانت في النموذج ، اضغط على زرّي لوحة المفاتيح: Ctrl + G 

2. وسيأخذك الى صفحة الكود ، وستلاحظ نافذة صغيرة في اسفل صفحة الكود ،

3. السطر التالي ، احذف اول اشارة من سطره ، الاشارة: '

    'Debug.Print myCriteria'

4. اذهب للنموذج واعمل التصفية التي تريدها

5. ارجع لصفحة الكود ، وستلاحظ في النافذة الصغيرة وجود كود التصفية

6. انسخ هذا الكود

7. اعمل استعلام فارغ

8. بالزر اليمين في الاستعلام ، غيّر الاستعلام من تصميم الى SQL

9. احذف الكلمات الموجودة في الاستعلام ، والصق كود النموذج

10. شغّل الاستعلام ، وشوف نتائجه 

11. ضع الاستعلام في وضع تصميم ، وشوف تفاصيله ، وهي التفاصيل التي قمت بها انت لتصفية النموذج.

12. العب في And و Or للحقول التي تريدها ، وسوف تعرف ايهم تستعمل والانسب لعملك ، وعليه ترجع لكود تصفية النموذج وتغيّر فيه حسب طلبك

 

*************************

هذا الموضوع هو انشاء تصفية ولعدة حقول ، والحمدلله استطعت انت ان تجرب النتائج

 

جعفر

  • Like 2
رابط هذا التعليق
شارك

تفضل

 

بدون سجلات التاريخ الفارغة

Between (IIf(Len([Forms]![main]![Datamasterform]![DateX] & "")=0,#01-Jan-1900#,[Forms]![main]![Datamasterform]![DateX])) And (IIf(Len([Forms]![main]![Datamasterform]![DateX] & "")=0,#01-Jan-2900#,[Forms]![main]![Datamasterform]![DateX]+65))

والشرح
Between 
(IIf(Len([Forms]![main]![Datamasterform]![DateX] & "")=0,#01-Jan-1900#,[Forms]![main]![Datamasterform]![DateX]))
And 
(IIf(Len([Forms]![main]![Datamasterform]![DateX] & "")=0,#01-Jan-2900#,[Forms]![main]![Datamasterform]![DateX]+65))

 

مع سجلات التاريخ الفارغة

Between (IIf(Len([Forms]![main]![Datamasterform]![DateX] & "")=0,#01-Jan-1900#,[Forms]![main]![Datamasterform]![DateX])) And (IIf(Len([Forms]![main]![Datamasterform]![DateX] & "")=0,#01-Jan-2900#,[Forms]![main]![Datamasterform]![DateX]+65)) Or [DateX] Is Null

والشرح
Between 
(IIf(Len([Forms]![main]![Datamasterform]![DateX] & "")=0,#01-Jan-1900#,[Forms]![main]![Datamasterform]![DateX]))
And 
(IIf(Len([Forms]![main]![Datamasterform]![DateX] & "")=0,#01-Jan-2900#,[Forms]![main]![Datamasterform]![DateX]+65))
Or [DateX] Is Null

 

جعفر

  • Like 2
رابط هذا التعليق
شارك

  • 7 months later...

وماذا عن فرز وتصفية البيانات بين اكثر من جدول وأكثر من نموذج؟

" تصفية متسلسلة أو متفرعة " من خلال الكمبوبوكس أو مربعات التحرير والسرد أي قوائم منسدلة مرتبطة بقوائم منسدلة اخرى, قائمة اختيارات مرتبطة بقوائم اخرى في اكسس, كومبوبوكس مرتبطه مع بعضها, كومبوبوكس معتمدة على بعضها.

كما في المثال المشار إليه في هذا الموضوع

 

تم تعديل بواسطه وائل أبو عبد الرحمن
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information