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

[مغلق - سؤال مخالف]تعديل على كود لطباعة سجلات محددة

مغلق
بدأه السرااج في 22 يوليو 2011 · 6 رد · 415 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

قبل فترة قام الاستاذ: احمد بارك الله فيه

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

والسلام ختام

أحمد مبارك الحيقي كتب:

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

أحد الحلول الممكنة يمكن تلخيص فكرته في التالي:

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

ملحوظة: قمت بتعديل طفيف على استعلام التقرير من أجل التخلص من التكرار...

والله أعلم.

#2

مع الشكر والتقدير للاخ احمد على شرحه

لكن هنا يتم تجاهل شي مهم...ما هو معيار تحديد السجل..

اي مالحدث الذي يؤدي الى كون السجل هو المحدد للطباعة

مثلا...قيمة رقم الطالب..معدله..نتيجته..صفه..او اي شء...

تحديد سبب اختيار سجل دون اخر هو مفتاح الحل..الذي يخيل الي انه ابسط بكثير من شرح الاخ احمد

تحياتي

وَمِنَ النَّاسِ مَن يُعْجِبُكَ قَوْلُهُ فِي الْحَيَاةِ الدُّنْيَا وَيُشْهِدُ الله عَلَى مَا فِي قَلْبِهِ وَهُوَ أَلَدُّ الْخِصَامِ

مواضيعي ومشاركاتي

#3
همام ابوعرقوب كتب:

مع الشكر والتقدير للاخ احمد على شرحه

لكن هنا يتم تجاهل شي مهم...ما هو معيار تحديد السجل..

اي مالحدث الذي يؤدي الى كون السجل هو المحدد للطباعة

مثلا...قيمة رقم الطالب..معدله..نتيجته..صفه..او اي شء...

تحديد سبب اختيار سجل دون اخر هو مفتاح الحل..الذي يخيل الي انه ابسط بكثير من شرح الاخ احمد

تحياتي

بارك الله فيك أستاذ الفاضل : همام

معيار اختيار السجل هو رقم الطالب المشار أليه بـ numberh في جدول الطلاب المشار إليه st_student حيث في الكود عومل رقم الطالب على أنه نص ولكن عند تطبيق مثل هذا الكود على مثال آخر ورقم الطالب أصبح رقم وليس نص يعطي رسالة أن هناك عدم تطابق في البيانات

والشكر موصول للاستاذ : همام على سرعة التفاعل

والسلام ختام

#5
superhot3000 كتب:

ماهي الفكرة في تحديد هذه الخطوة لم أستوعبها

post-47883-016924300 1311368655_thumb.jp

بارك الله فيك

ولا حرمك الله الاجر

هذا رابط الموضوع الاصلي

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

/index.php?showtopic=213852

والسلام ختام

#6

اخى

كل ما تحتاجه هو ازالة علامة التنصيص من هذا السطر

sWhere = sWhere & "'" & c.ItemData(vItem) & "', "

ليصبح هكذا

sWhere = sWhere  & c.ItemData(vItem) & ", "

و هذا السطر

 sWhere = "st_student.numberh IN (" & Strings.Left(sWhere, Len(sWhere) - 3) & "') " & _

ليصبح

sWhere = "st_student.numberh IN (" & Strings.Left(sWhere, Len(sWhere) - 2) & ") " & _

بالنسبة للجزء

Strings.Left(sWhere, Len(sWhere) - 3)

ربما يكون غير مألوف للكثيرين

و لكن لو جعلناه هكذا

Left(sWhere, Len(sWhere) - 3)

سيكون مألوف أكثر

تم تعديل هذه المشاركة بواسطة Abo_Yossof في 23 يوليو 2011 في 01:29

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#7

عذرا الموضوع مغلق

للأسئلة يجب تحديد النوع سؤال وطرح نقاط عليه والحد الأدنى 3 نقاط وإلا سيغلق موضوعك فورا وسيحذف بعد ذلك حتى لو تمت الإجابة عليه .

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

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

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

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

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

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

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