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

[ تمت الإجابة ]كيف يمكن طباعة عدد من محدد من السجلات

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

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

كيف يمكن طباعة عدد محدد من الطلاب بامر واحد فقط

يعني بعد اختيار الطلاب الذين اريد ان اطبع لهم البطاقة او أي خطاب أحدد الطلاب فقط ثم اضغط على زر الطباعة أو المعاينة ويقوم بعرض بطاقات من تم اختيارهم فقط

والمثال في المرافقات

db55.rar

#2

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

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

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

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

والله أعلم.

db55.rar

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 2 فبراير 2010 في 03:34

#3

ما شاء الله عليك يا استاذنا الكريم والله أكبر. أختصرت أنت محاولاتي التي استمرت أكثر من 3 ساعات لايجاد الحل وبعد أن تعبت رجعت لأجد الحل عندك بكل سهولة ويسر. ورغم بساطة السؤال الذي يبدو للوهلة الاولى أنه سهل إلا أن الاجابة عليه تتطلب المعرفة بعدة قواعد أولها كيفية استخراج القيم المختارة من القائمة وثانيها كيفة تصفية بيانات الجدول باستخدام هذه القيم وثالثها وضع الاولى والثانية في كود برمجي واحد ويتم من خلاله فتح التقرير المطلوب. لا أدري ماذا أقول غير زادك الله من علمه. وشكراً جزيلاً للسائل الذي أتاح لي التعرف على هذه المعلومات من خلال هذه الاجابة الحرَفية. هذا وقد توصلت إلى حل أخر أقل حرفية من الحل الذي عرضته سيادتكم وهو يتلخص في انشاء حقل جديد بالجدول الأساسي (st_student) ويكون نوعه (نعم/لا) يتم على اساسه إختيار السجل المراد طباعته قبل الطباعة وبالضغط على زر الطباعة يتم طباعة كل السجلات المؤشر عليها (نعم). وطبعاً سيتم ازالة هذا التأشير وتغيره إلى (لا) بعد الانتهاء من الطباعة مباشرة. ولكن في الحقيقة أعجبتنى طريقتك المختصرة جداً وفي نفس الوقت سريعة التنفيذ ومن خبير في البرمجة.

تم تعديل هذه المشاركة بواسطة team2000 في 2 فبراير 2010 في 05:47

#4

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

أستاذي الفاضل ..... احمد ......

بارك الله فيك ، وبصراحة أعجز عن الشكر

ولكن كما قال صلى الله عليه وسلم

من قال لأخيه ... جزاك الله خير ....... فقد أبلغ في الثناء

فأقول ..جزاك االله ألف خير وبارك الله فيك وفي عمك وعمرك

وقبل الختام

وكلي أسف وحرج على عدم الرد في وقت مبكر

وذلك لعدم تمكني من الدخول وذلك لارتباطي بعمل مسائي

ولك كل الشكر والتقدير

والسلام ختام

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

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

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

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

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

والله أعلم.

بارك الله فيك اخي الكريم .:.:. أحمد .:.:.

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

حاولت ولم استطع حل

هل من مساعد

والسلام ختام

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

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

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

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

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