الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في فلترة التقرير بناءاً على اختيارات في النموذج

مغلق
بدأه SANDANET في 2 أغسطس 2007 · 4 رد · 1,158 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أما بعد ...

لقد طرحت نفس الموضوع سابقاً لكن للاسف لم أجد الحل المناسب

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

لذلك وضعت المثالين مع بعض لأهل الخبرة الذين لا تستعصي عليهم مثل هذه المشاكل

المثال الأول db1 هو المطلوب والمثال الأجنبي db2 الفكرة موجودة فيه ارجو من الأخوة الأفاضل تطبيق فكرة المثال db2 على المثال db1

ولكم جزيل الشكر مقدماً

أخوكم بالله sandanet

db1.zip

db2.zip

#2

سلام

أهلا: ساندانت

في الحقيقة جذبتني الحيل المجودة في مثالك! وقررت أن أشرح فكرتها للتعرف على خصيصة نادرا ما نستخدمها!

- رؤية تحليلية للكود:

Private Sub Command28_Click()

Dim strSQL As String, intCounter As Integer
	 'Build SQL String
	 For intCounter = 1 To 5
	   If Me("Filter" & intCounter) <> "" Then
		 strSQL = strSQL & "[" & Me("Filter" & intCounter).Tag & "] " & " = " & Chr(34) & Me("Filter" & intCounter) & Chr(34) & " And "
	   End If
	 Next

	 If strSQL <> "" Then
		'Strip Last " And "
		strSQL = left(strSQL, (Len(strSQL) - 5))
		'Set the Filter property
		Reports![rptCustomers].Filter = strSQL
		Reports![rptCustomers].FilterOn = True
	 Else
		Reports![rptCustomers].FilterOn = False
	 End If

End Sub

المقطع الأبرز في هذا الكود هو هذا السطر:

 strSQL = strSQL & "[" & Me("Filter" & intCounter).Tag & "] " & " = " & Chr(34) & Me("Filter" & intCounter) & Chr(34) & " And "

- هذا السطر يحتوي على عبارة (SQL) أو عبارة (WHERE) بالأصح. وهي العبارة التي استخدمها المبرمج لعمل التصفية للتقرير (عن بعد)

- يتكون هذا السطر على أسماء حقول الجدول المستخدم في التقرير مع أدوات التحكم (Combobox) المستخدمة في النموذج، والتي تحتوي على قيم اليانات المستخدمة في التقرير.

- قام المبرمج بتخزين أسماء حقول الجدول في الخصيصة (Tag) تحكمات (Combobox) كما في الصورة التالية:

post-10429-1186083368_thumb.jpg

- اسم الحقل هو: (CompanyName)

- كما أن اسم عنصر التحكم هو: (Filter1)

- لكي يستطيع المبرمج تغيير القيمتين السابقتين قام عمل دورة (For... Next) بعدد عناصر التحكم الموضوعة في النموذج

وحيث أن عدد عتاصر التحمكم هو (5) عناصر فقد قام بتسمتها بنفس الاسم مع تغيير الرقم في كل حقل هكذا (Filter1, Filter2, Filter3)

- ثم أسند تغيير الرقم إلى الدالة (For... Next) هكذا (Me("Filter"& intCounter).Tag)

- قمة (Tag) هنا هو اسم الحقل في الجدول وهو: (CompanyName) كما في الصورة

- وفي المقطع الثاني اسندها إلى اسم عنصر التحكم فقط (Me("Filter" & intCount) وهو هنا (Filter1)

- ثم قام بتخزين هذه القيم في المتغير النصي (strSQL) تعود بقيمة مركبة في كل مرة تتغير معها قيمة المتغير (intCounter)

- قام المبرمج بوضع قمية المتغير (strSQL) في جملة فتح التقرير مستخدما خصيصة تصفية التقرير (Reports![rptCustomers].Filter = strSQL)

أكتفي بهذا القدر وسأقوم بإكمال ما تبقى لاحقا مع بعض التحليل للكود والتغيير عليه

تحياتي للجميع

القحم

#3

بسم الله الرحمن الرحيم

أخى الكريم

ربما حسب ما أعلم قد يكون من المناسب لأداء عملية فلترة البيانات فى التقرير وضع المعايير فى الإستعلام المبنى عليه التقرير أسفل الحقل المطلوب

لذا يجب فتح الإستعلام المبنى عليه التقرير فى وضع التصميم ثم أسفل الحقل المطلوب وأمام معايير أنقر بالزر الأيمن للماوس وأختر منشئ التعبير

ثم من منشئ التعبير حدد النموذج المطلوب فى الناحية اليمنى ثم أنقر نقراً مزدوجا على الكائنات التى ستحتوى الشرط فى الوسط (إذا كتب Access "نماذج" حولها إلى forms)

مرفق ملفك الأول بعد تغيير الإستعلام الأول ليقرأ البيانات من النموذج وقد أضفت زر لفتح هذا الإستعلام بالإضافة للزر الموجود من البداية لفتح التقرير

هذا إذا أردت الشروط مجتمعة أما إذا أردت وضعها إختيارية فهناك حلول عديدة لهذا الأمر قد نناقشها فيما بعد

(ربما لم أفهم معنى وجود تقرير فرعى يحتوى بيانات من جدول أخر غير مرتبط بالجدول الأول )

post-113243-1186085539_thumb.jpg

post-113243-1186085585_thumb.jpg

db1_a.zip

تم تعديل هذه المشاركة بواسطة العمرى بن في 2 أغسطس 2007 في 23:36

#4

بسم الله الرحمن الرحيم

الإخ الكريم ساندنت

حسب علمى

لعمل استعلام على شروط إختيارية هناك العديد من الطرق منها طرق بواسطة الكود

فى الملف الذى أرفقته أنت أولا قمت بهذه المحاولة البدائية لإنشاء الإستعلام بواسطة شروط إختيارية

وقد انشأت إجراء واحد rebuild_query لأداء ذلك فى نفس النموذج filter_frm

وقد استخدمت إستعلام جديد qq1 وتقرير جديد report3

أيضا هذا الإجراء بتعامل مع العناصر الموجودة فى النموذج بأسماءها وكذلك حقول الجدول

بالمناسبة شرح الإستعلام داخل الإستعلام عسى أن أكون نجحت فى ذلك

والحمد لله قد عمل معى هذا الإجراء بنجاح على جهازى فعسى أن يعمل عنك

db1_b.zip

#5

بارك الله فيكم جميعاً على هذا الطرح المميز وعسى أن نصل الى حل مثالي في هذا الموضوع المهم جداً بنظري

وبالنسبة لسؤال الاخ العمري بن عن ( ربما لم أفهم معنى وجود تقرير فرعى يحتوى بيانات من جدول أخر غير مرتبط بالجدول الأول) فالتقرير الفرعي يأخذ بياناته من جدول يتم ترحيل البيانات فيه من الجدول الأول وفي التقرير يتطلب عرضها مع بيانات الجدول الأول .

وشكرا لكم جميعا

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…