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

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

قام بنشر

السلام عليكم: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
قام بنشر

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

Form_Filter_Clipboard012.jpg.fa653abd389c60efcb83eb686d48ac49.jpg

.

فيصبح الكود

Form_Filter_Clipboard013.jpg.a3d58f3f3fd41077d689a4b653725a96.jpg

.

 

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

Form_Filter_Clipboard011.jpg.a9836e1ed6d8ef3c96cedca16bc03cdb.jpg

.

ثم اردنا اضافة تصفية بإستبعاد الاسكندرية ، فيصبح كود التصفية هكذا

Form_Filter_Clipboard014.jpg.e3098a8a68c261e83a007c3c8a1380ab.jpg

.

جعفر

  • Like 2
قام بنشر

استاذ جعفر ما الخطأ فى الكود 

 

Me.TestF.Form.Filter = "([testQ].[Country] <> "اسكندرية" Or [testQ].[Country1] Is Null)"
Me.TestF.Form.Filter = "(([testQ].[datex] batween #5/1/2017# and #7/1/2017#)) AND ([testQ].[country1]<> "اسكندرية" or [testQ].[country1] is null)"

 

Capture1111111111111111111111111111111.JPG

قام بنشر
11 hours ago, jjafferr said:

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

Form_Filter_Clipboard012.jpg.fa653abd389c60efcb83eb686d48ac49.jpg

.

فيصبح الكود

Form_Filter_Clipboard013.jpg.a3d58f3f3fd41077d689a4b653725a96.jpg

.

 

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

Form_Filter_Clipboard011.jpg.a9836e1ed6d8ef3c96cedca16bc03cdb.jpg

.

ثم اردنا اضافة تصفية بإستبعاد الاسكندرية ، فيصبح كود التصفية هكذا

Form_Filter_Clipboard014.jpg.e3098a8a68c261e83a007c3c8a1380ab.jpg

.

جعفر

استاذى العزيز جعفر لقد 
رقيت  الاوفيس من 2003 الى 2016 
وعند اختيار مثلا اسكندرية كما بالصور لا اجد الكود

اسف تم الوصول اليها 

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

قام بنشر
13 ساعات مضت, محمد احمد لطفى said:

هل تنصحنى بـ 
office 2016 

أم ماذا

سأفرد موضوع لهذا السؤال ، فقد تكرر هذا السؤال في عدة مواضيع:smile:

 

8 ساعات مضت, محمد احمد لطفى said:

استاذ جعفر ما الخطأ فى الكود 
 


Me.TestF.Form.Filter = "([testQ].[Country] <> "اسكندرية" Or [testQ].[Country1] Is Null)"
Me.TestF.Form.Filter = "(([testQ].[datex] batween #5/1/2017# and #7/1/2017#)) AND ([testQ].[country1]<> "اسكندرية" or [testQ].[country1] is null)"

Capture1111111111111111111111111111111.JPG

1. نحن نحتاج الى Requery ، اذا اردنا قراءة البيانات من جديد من الجدول او الاستعلام ،

بينما في الطريقة اعلاه التصفية (me.Filter) تكون في بيانات النموذج مباشرة ، ولا تحتاج الى Requery ، حيث (me.FilterOn = True) يقوم بمقام Requery ،

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

وعليه ، يصبح الكود هكذا:


    myCriteria = "([testQ].[datex] between #5/1/2017# and #7/1/2017#)"
    myCriteria = myCriteria & " AND ([testQ].[country1]<> " & Chr(34) & "اسكندرية" & Chr(34)
    myCriteria = myCriteria & " or [testQ].[country1] is null)"

    Me.TestF.Form.Filter = myCriteria
    Me.TestF.Form.FilterOn = True

 

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

Form_Filter_Clipboard015.jpg.83a3f7d64b256977eea0f26ff87eaf50.jpg

.

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

Form_Filter_Clipboard016.jpg.368abe44b90a8a72e3edb7d6afb802d3.jpg

.

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

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

 

جعفر

  • Like 1
قام بنشر

استاذى جعفر 
myCriteria = myCriteria & " AND ([testQ].[country1] =  "اسكندرية"
هذا الكود لا يعمل 
ولكن هذا يعمل 
myCriteria = myCriteria & " AND ([testQ].[country1]<> " & Chr(34) & "اسكندرية" & Chr(34)
عنما اريد اظهار بيانات اسكندرية فقط لا يعمل 
و ما فائدة 
Chr(34)

قام بنشر (معدل)

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

 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 "الدقهلية"


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

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

لقد فشلت فشلا ذريعا فى كتابة هذا الكود 
اريد ظهور المدينة 
 

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

المدرسة 
خالد بن الوليد or الخلفاء الراشدين 
 حاولت وفشلت فى زرار تصفية شاملة 
حتى التاريخ لا يعمل بالشكل الصحيح 

فبرجاء تطبيق الكود فى النموذج

 

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

660.1.Test2006.rar

قام بنشر

وعليكم السلام: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:

 

1.

اذن الخطأ هذا كان بسبب انك ما ادخلت تاريخ ، ولأن الكود محتاج التاريخ في حقل DateX ، لهذا السبب حصلت على الخطأ:

1 ساعه مضت, محمد احمد لطفى said:

حدث خطأ

Capture555555566.JPG.dda7468353a470f635cdac5948d6906a.JPG

 

2.

خلينا نشوف الكود لوسمحت ، لأن الكود عندي شغال تمام بالنتائج الصحيحة ،

فيمكن انت عملت تغيير في الكود وحصلت لك المشكلة

1 ساعه مضت, محمد احمد لطفى said:

ادخلت التاريخ
ولم يظهر اى نتائج

 

يظهر نفس تاريخ الادخال فقط

يظهر نفس تاريخ الادخال فقط

والخلايا التى ليس لها مدينة لا تظهر

 

جعفر

 

 

شوف المرفق في مشاركتي الاولى

  • Like 1
قام بنشر
Just now, jjafferr said:

وحده وحده يا محمد:smile:

 

1.

اذن الخطأ هذا كان بسبب انك ما ادخلت تاريخ ، ولأن الكود محتاج التاريخ في حقل DateX ، لهذا السبب حصلت على الخطأ:

 

2.

خلينا نشوف الكود لوسمحت ، لأن الكود عندي شغال تمام بالنتائج الصحيحة ،

فيمكن انت عملت تغيير في الكود وحصلت لك المشكلة

 

جعفر

 

 

شوف المرفق في مشاركتي الاولى

اولا شكرا لك كثيرا وجعله الله فى ميزان حسناتك

 

    myCriteria = myCriteria & "[testQ].[datex] between #" & Me.DateX & "# and #" & Me.DateX - 65 & "#"
    myCriteria = myCriteria & ")"

اليس هذا الكود يعنى عند كتابة التاريخ تكون النتيجة تصفية البيانات من التاريخ الى التاريخ - 65 يوما 
اذاكتبت 2/5/2017 
لا يعرض لى 
1/5/2017
ثانيا فى المدينة 

    myCriteria = myCriteria & "[testQ].[country1] is null"
    myCriteria = myCriteria & ")"

لا يأتى بالاخلايا الفارغة
 

قام بنشر (معدل)

 

6 hours ago, محمد احمد لطفى said:

اولا شكرا لك كثيرا وجعله الله فى ميزان حسناتك

 


    myCriteria = myCriteria & "[testQ].[datex] between #" & Me.DateX & "# and #" & Me.DateX - 65 & "#"
    myCriteria = myCriteria & ")"

اليس هذا الكود يعنى عند كتابة التاريخ تكون النتيجة تصفية البيانات من التاريخ الى التاريخ - 65 يوما 
اذاكتبت 2/5/2017 
لا يعرض لى 
1/5/2017
ثانيا فى المدينة 


    myCriteria = myCriteria & "[testQ].[country1] is null"
    myCriteria = myCriteria & ")"

لا يأتى بالاخلايا الفارغة
 

 هذا بعد تجربة المرفق فى المشاركة الاولى 

Capture15999.JPG

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

أخي محمد: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 [Forms]![main]![Datamasterform]![From_Date] and [Forms]![main]![Datamasterform]![To_Date] 

لن تظهر اى سجلات 
هل يمكن عمله بطريقة الكود الاخر 
IIf(Len([Forms]![Datamasterform]![seriesAllF]![date watch] & "")=0;Nz([date watch];"");[Forms]![Datamasterform]![seriesAllF]![date watch])

لكى تظهر جميع السجلات
بحيث اتغلب على مشكلة التاريخ
قام بنشر

تفضل

 

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

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
قام بنشر

استاذ جعفر لا اعلم و لكن هذا الموضوع لا  افهمه كثيراً
أولا اتتنى رسالة
ان هناك جملة غير صالحة 

وهل يمكن تطبيقها على خليتين مثل هذا الكود ليسهل التعامل معها من داخل النموذج
 

between [Forms]![main]![Datamasterform]![From_Date] and [Forms]![main]![Datamasterform]![To_Data]

فهل يمكن تطبيقها على النموذج 

 

مع اضافة الكود

"قليوبية Or "اسكندرية " Or "الدقهلية"

المدرسة 
خالد بن الوليد or الخلفاء الراشدين 
 حاولت وفشلت فى زرار تصفية شاملة 
حتى التاريخ لا يعمل بالشكل الصحيح 

أعتذر منك لا اعرف لماذا و لكن لا استطيع تطبيقها 

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

Capture12388777.JPG

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