السلام عليكم ورحمة الله وبركاته
قبل فترة قام الاستاذ: احمد بارك الله فيه
بوضع كود لطباعة سجلات محددة ولكن عندما اردت تطبيق هذا الكود في مثال آخر واصبح الحقل رقم بينما الكود معمول على أن رقم الطالب نص فلم انجح حاولت مرارا وتكرارا فلم استطع الوصول لحل فهل من مساعد بارك الله في الجميع
والسلام ختام
أحمد مبارك الحيقي كتب:وعليكم السلام ورحمة الله وبركاته...
أحد الحلول الممكنة يمكن تلخيص فكرته في التالي:
1. الطريقة OpenReport للكائن DoCmd تسمح لك بتحديد شرط أو أكثر يطبق على استعلام SQL الذي يبنى عليه التقرير. هذا الشرط تمرره للتقرير عبر المعامل الرابع للطريقة OpenReport، وهو في الحقيقة عبارة عن مقطع WHERE من عبارة SQL لكن بدون الكلمة WHERE نفسها. الحاصل أن بيانات التقرير يتم تصفيتها بناء على هذا الشرط.
2. يمكن استخدام العامل IN من عوامل SQL لبناء الشرط في نص. هذا العامل يحدد مجموعة من القيم بين قوسين لاستخدامها كشرط لاختيار البيانات. مثلاً، لاختيار الطالب ذي الرقم 1000 في استعلام ،يمكن كتابة:
SELECT * FROM st_student WHERE numberh IN ('1000')لاحظ استخدام الفاصلتين العلويتين، لأن رقم الطالب في جدول الطلاب معرف كنص. كان من الممكن استخدام عامل المساواة (=) من أجل اختيار الطالب، لكن في الغالب سيتم اختيار أكثر من طالب، واستخدام IN هنا أنسب، لأنه اختصار لكثير من عوامل المساواة مع OR.
3. يمكن بناء هذا النص يدوياً بالمرور على كل البنود المختارة في القائمة، واستخراج رقم الطالب من البند، مع لصق هذه الأرقام بطريقة مناسبة بعضها إلى جانب بعض.
4. الخاصية ItemsSelected لمربع السرد تعطيك كل البنود المختارة. عليك أن تمر عليها في عبارة For each، وتستخلص الخاصية ItemData لكل بند (هذه الخاصية تعطيك هنا رقم الطالب). من أجل معرفة تفاصيل استخدام هاتين الخاصيتين، راجع من فضلك ملفات المساعدة.
5. الكود النهائي سيكون شيئاً مثل هذا (تجده في الملف المرفق):
Dim vItem As Variant Dim sWhere As String For Each vItem In c.ItemsSelected sWhere = sWhere & "'" & c.ItemData(vItem) & "', " Next vItem If Len(sWhere) > 0 Then sWhere = "st_student.numberh IN (" & Strings.Left(sWhere, Len(sWhere) - 3) & "') " & _ "AND st_student.alsaf = " & Me.a & " AND st_student.alfasel = " & Me.b Else MsgBox "من فضلك، قم باختيار طالب أو أكثر من القائمة", vbExclamation, "بيانات ناقصة" GoTo Exit_أمر22_Click End If DoCmd.OpenReport "تقرير1", acViewPreview, , sWhereملحوظة: قمت بتعديل طفيف على استعلام التقرير من أجل التخلص من التكرار...
والله أعلم.