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

أريد تمرير اسم التقرير برمجيا (كمتغير)


Lamyaa
إذهب إلى أفضل إجابة Solved by ابو جودي,

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

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

 

كيف أجعل اسم التقرير متغير (الملون بالأحمر)

كيف استخدم المتغير strReportName  بدلا عن اسم التقرير "ct17R2"

 

Dim strReportName As String

strReportName = Me.ReportName

' فتح التقرير
DoCmd.OpenReport strReportName, acViewReport

' تغيير مصدر التقرير برمجيا
Reports![ct17R2].Report.RecordSource = "qryStudents"

 

رابط هذا التعليق
شارك

السؤال مبهم قليلا

ولكن وفق فهمي للسؤال

لديك تقرير اذا فتح التقرير من نموذج ا يكون اسم التقرير تقرير 1 مثلا ومصدر بياناته الجدول aa

واذا فتحناه من نموذج ب يكون اسم التقرير تقرير 2 ومصدره استعلام 1 مثلا

اذا كان فهمي صحيح ممكن استخدام البارامتر السادس في امر فتح التقرير

حيث ان امر فتح يحتوي على سته معلمات بالترتيب

  1. ReportName
  2. View
  3. FilterName
  4. WhereCondition
  5. WindowMode
  6. OpenArgs

والسادس هو مايهمنا

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

DoCmd.OpenReport "companies", acViewPreview, , , , 1

او هكذا

DoCmd.OpenReport "companies", acViewPreview, OpenArgs:=1

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

If Me.OpenArgs = 1 Then
Me.Report.Caption = "test"
Me.Report.RecordSource = "q_1"
Else
Me.Report.Caption = "kh"
Me.Report.RecordSource = "companies"
End If

 

 

111.png

333.png

تم تعديل بواسطه مبرمج سابق
  • Like 4
  • Thanks 1
رابط هذا التعليق
شارك

والله ياعم قاسم انا فهمي على قدي

3 ساعات مضت, Lamyaa said:

Dim strReportName As String

strReportName = Me.ReportName

اذا اردنا متغيير عام نضع الامر التالي في بداية اي وحدة نمطية

Public x As String

ثم في امر فتح نضع

x = "اسم التقرير"
DoCmd.OpenReport x, acViewPreview

 

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

" إذا عُرِفَ السبب بطل العجب "

 

أول ما تبادر لذهني بعد قرائتي للموضوع : ما الهدف من ذلك ؟

والجواب عن هذا السؤال هو ما سيفتح لنا باب الحل المناسب🙂 

  • Thanks 1
  • Haha 1
رابط هذا التعليق
شارك

2 ساعات مضت, Eng.Qassim said:

على كل حال زيادة في المعلومات واثراء الموضوع

نعم احسنت اخي قاسم

الحقيقة ان الموضوع فعلا يحتاج ايضاح كما اشار مستر @Moosak

على كل حال كمداخلة اخيرة الى ان تتضح الامور للاخوة

نحتاج احيان الى اعادة تسمية كائن في قاعدة البيانات سواء كان جدول او استعلام او فورم او تقرير او وحدة نمطية

ونرغب ان يتم التغيير عن طريق الكود

DoCmd.Rename "r_2", acReport, "companies"

في هذا الامر لدينا ثلاث معلمات

NewName هنا يساوي r_2

ObjectType وهو نوع الكائن و هنا تقرير " بعض قدامي المبرمجين بدلا من تحديد نوع الكائن يضع القيمة للكائن وهنا رقم 3 "

OldName وهو اسم التقرير القديم companies

تحياتي ولنا لقاء في موضوع اخر

 

  • Thanks 1
رابط هذا التعليق
شارك

8 ساعات مضت, مبرمج سابق said:

السؤال مبهم قليلا

ولكن وفق فهمي للسؤال

لديك تقرير اذا فتح التقرير من نموذج ا يكون اسم التقرير تقرير 1 مثلا ومصدر بياناته الجدول aa

واذا فتحناه من نموذج ب يكون اسم التقرير تقرير 2 ومصدره استعلام 1 مثلا

اذا كان فهمي صحيح ممكن استخدام البارامتر السادس في امر فتح التقرير

حيث ان امر فتح يحتوي على سته معلمات بالترتيب

  1. ReportName
  2. View
  3. FilterName
  4. WhereCondition
  5. WindowMode
  6. OpenArgs

والسادس هو مايهمنا

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

DoCmd.OpenReport "companies", acViewPreview, , , , 1

او هكذا

DoCmd.OpenReport "companies", acViewPreview, OpenArgs:=1

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

If Me.OpenArgs = 1 Then
Me.Report.Caption = "test"
Me.Report.RecordSource = "q_1"
Else
Me.Report.Caption = "kh"
Me.Report.RecordSource = "companies"
End If

 

 

111.png

333.png

 

أستاذي الفاضل جزيل الشكر والتقدير على تفاعلكم

 

يبدو أنني لم أوفق في شرح المطلوب بشكل جيد

 

يوجد لدي عدة تقارير : rptStudents, rptStudents3, rptStudents5, rptStudents6,... etc

مصدر البيانات لهذه التقارير إما qryStudents1 أو qryStudents2

اسم التقرير المراد فتحه مكتوب في حقل نصي Me.txtReportName (يتك كتابة اسم التقرير آليا عند تغيير ComboBox)

 

أقوم بفتح التقارير من نموذج من خلال الكود التالي:

'قمت بتعريف متغير لتخزين اسم التقرير فيه

Dim strReportName As String

strReportName = Me.txtReportName

' سأقوم بفتح التقرير بناء على الاسم الموجود في المتغير


DoCmd.OpenReport strReportName, acViewReport

 

' والآن أريد أن أمرر مصدر البيانات للتقرير الذي تم تحديده (أي تقرير)

وأن أجعل مصدره هو الاستعلام qryStudents1:


Reports![ct17R2].Report.RecordSource = "qryStudents1"

أي أنني سأحتاج تغيير اسم التقرير الذي لونته بالأحمر.

 

وسأقوم بتطبيق الخطوات كلها في نموذج آخر frmStudents2

ولكن سيتغير مصر الاستعلام إلى استعلام آخر

Reports![ct17R2].Report.RecordSource = "qryStudents2"

 

آملأن أكون قد استطعت توضيح المطلوب

6 ساعات مضت, Eng.Qassim said:

وعليكم السلام

مشاركة مع اخي @مبرمج سابق

وحسب فهمي ايضا .. استخدم الكود التالي لتنسب اسم التقرير للمتغير

Reports(strReportName).Caption = "ct17R2"

 

جزيل الشكر على تفاعلك

 

لا أقصد تغيير عنوان التقرير إنما اسم التقرير قبل تغيير مصدره ..

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

  • Confused 1
رابط هذا التعليق
شارك

منذ ساعه, مبرمج سابق said:

نعم احسنت اخي قاسم

الحقيقة ان الموضوع فعلا يحتاج ايضاح كما اشار مستر @Moosak

على كل حال كمداخلة اخيرة الى ان تتضح الامور للاخوة

نحتاج احيان الى اعادة تسمية كائن في قاعدة البيانات سواء كان جدول او استعلام او فورم او تقرير او وحدة نمطية

ونرغب ان يتم التغيير عن طريق الكود

DoCmd.Rename "r_2", acReport, "companies"

في هذا الامر لدينا ثلاث معلمات

NewName هنا يساوي r_2

ObjectType وهو نوع الكائن و هنا تقرير " بعض قدامي المبرمجين بدلا من تحديد نوع الكائن يضع القيمة للكائن وهنا رقم 3 "

OldName وهو اسم التقرير القديم companies

تحياتي ولنا لقاء في موضوع اخر

 

فكرة تغيير اسم التقرير رائعة في حال كانت التقرير ذا تصميم واحد، ولكن في حالة كان التقرير مختلف فلن ينفع

رابط هذا التعليق
شارك

6 ساعات مضت, مبرمج سابق said:

والله ياعم قاسم انا فهمي على قدي

اذا اردنا متغيير عام نضع الامر التالي في بداية اي وحدة نمطية

Public x As String

ثم في امر فتح نضع

x = "اسم التقرير"
DoCmd.OpenReport x, acViewPreview

 

الفكرة أستاذي ليست في جعل المتغير عاما أو خاصاً .. الفكرة كيف أمرر هذا المتغير على هذا السطر البرمجي:

ففي الحالة العادية يتم كتابة اسم التقرير مباشرة

Reports![rptStudents].Report.RecordSource = "qryStudents2"

ولكن في حال كان اسم التقرير متغيير بناء على تغير المعطيات فكيف يمكن تمرير هذا المتغير على السطر التالي:

Reports![X].Report.RecordSource = "qryStudents2"

 

رابط هذا التعليق
شارك

طيب ممكن تجربة المرفق الاتى 

لانه يبدو لى ان التقرير نريده ان يقتح على اكثر من مصدر بيانات حسب الحالة

ان لم افهم الموضوع جيدا برجاء مرفق حتى اسطيع الفهم   >>---> صعيدى بيفهم بالعافية  :yes:

 

Chang Record Sources Report.mdb

  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

52 دقائق مضت, Lamyaa said:

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

انا اريد مرفقا 

انا لم افهم اى شئ 

  • Thanks 1
رابط هذا التعليق
شارك

34 دقائق مضت, ابو جودي said:

طيب ممكن تجربة المرفق الاتى 

لانه يبدو لى ان التقرير نريده ان يقتح على اكثر من مصدر بيانات حسب الحالة

ان لم افهم الموضوع جيدا برجاء مرفق حتى اسطيع الفهم   >>---> صعيدى بيفهم بالعافية  :yes:

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

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL1 As String, strSQL2 As String
Set db = CurrentDb
db.QueryDefs.Delete "qr1"
    If com1 = "التقرير الاول" Then
        strSQL1 = "SELECT tblA.ID, tblA.fld FROM tblA;"
        Set qdf = db.CreateQueryDef("qr1", strSQL1)
    ElseIf com1 = "التقرير الثاني" Then
        strSQL2 = "SELECT tblB.ID, tblB.fld FROM tblB;"
        Set qdf = db.CreateQueryDef("qr1", strSQL2)
    End If
DoCmd.OpenReport "rptFlayReport", acViewPreview

وهذا المثال .....

 

Chang Record Sources Report.mdb

  • Like 3
  • Thanks 1
رابط هذا التعليق
شارك

منذ ساعه, Barna said:

اثراء الموضوع باستخدم هذا الكود ....

جزاكم الله خيرا استاذى الجليل ومعلمى القدير الاستاذ @Barna :fff:

واسمح لى ممكن نختصر الكود ليكون 

Dim qdf As DAO.QueryDef
Dim strSQL As String

CurrentDb.QueryDefs.Delete "qr1"
    
If com1 = "التقرير الاول" Then
        strSQL = "SELECT tblA.* FROM tblA;"
    ElseIf com1 = "التقرير الثاني" Then
        strSQL = "SELECT tblB.* FROM tblB;"
    End If

Set qdf = CurrentDb.CreateQueryDef("qr1", strSQL)
DoCmd.OpenReport "rptFlayReport", acViewPreview

ولارد بضاعتكم اليكم بطريقة مختلفة بعض الشئ تجنبا لاستخدام الحروف العربية ,  واضفاء مرونة أكبر فى حال اردنا تمرير اسم التقرير من خلال الكود

 

الافكار كثيرة وتتصارع وتتلاحق فى رأسي بسبب عدم فهمى الهدف والمطلوب تحقيقة بصورة مباشرة من السؤال بسبب غموض الهدف 

ولكن على حال تبقى الحاجة هى ام الاختراع وفهم السؤال هو شطر الجواب

 

Chang Record Sources Report Barna V2.mdb

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

11 ساعات مضت, Eng.Qassim said:

لينا بهذا الموضوع استاذ خالد ...

بصراحة لا اعرف لماذا نلجأ الى تغيير اسم التقرير ؟

استاذي القدير قاسم الامر موجود ضمن اوامر فيجول بيسك وهو موجود بالصيغة الموضحة بالرد السابقة وايضا موجود ضمن اوامر RunCommand

ولكن طريقة العمل تختلف الاول يغير الاسم مباشرة والاخر يحتاج الى "SelectObject" والفكرة تحديد الكائن و جعل الاسم قابل للتعديل اي انه اشبه ما يكون بتحديد جدول ثم النقر على f2 بلوحة المفاتيح .

اما لماذا نلجأ لتغيير الاسم احيانا حدث معين يتطلب ذلك

على كل حال بالنسبة للموضوع والحل المقدم من الاساتذة والذي يرتكز على حذف واعادة انشاء الاستعلام الا يؤدي الى زيادة حجم قاعدة البيانات على المدى البعيد

حيث ان معلوماتي ان الاكسس لا يستعيد مساحة الكائن المحذوف الا بعد الضغط والاصلاح

مع اعجابي بالفكرة

تحياتي

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

ماشي يا استاذة خلينا نتصور الامر حسب فهمي

عندك 10 تقارير مبنية على استعلامين اثنين مثلا q_1 و q_2

وعندك فورمين اثنين كل فورم فية قائمة باسماء التقارير العشرة وعندك حقل نصي عند اختيار التقرير من القائمة يكتب اسمه في الحقل النصي

وعند امر فتح التقرير يتم فتح التقرير المكتوب اسمه في الحقل النصي ويكون مصدر سجلاته الاستعلام q_1 طالما فتحناه من فورم 1 ويكون مصدرة q_2 اذا فتحناه من فورم2

اذا كان فهمي صحيح ممكنى عمل ذلك وبكود مختصر

نحتاج الى متغير في بداية الاكواد اي يمكن استخدامه في كافة احداث النموذج

Dim x As String

في حدث بعد التحديث للقائمة نضع الامر التالي

Me.tx2 = Me.c2.Column(0)
x = Me.tx2

tx2 هو الحقل النصي
co القائمة المنسدلة
x هو المتغير

في زر فتح التقرير نضع الامر التالي

Dim strSQL As String
strSQL = "q_1"
DoCmd.OpenReport x, acViewPreview, , , , strSQL

وفي النموذج الثاني نغير q_1 الى q_2

ثم نفتح التقارير في وضع التصميم وحدث فتح التقرير نضع الامر التالي

Me.RecordSource = Me.OpenArgs

واذا كنت لم افهم فاعتذر مقدما

تحياتي

تم تعديل بواسطه مبرمج سابق
  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

3 ساعات مضت, مبرمج سابق said:

عندك 10 تقارير مبنية على استعلامين اثنين مثلا q_1 و q_2

وعندك فورمين اثنين كل فورم فية قائمة باسماء التقارير العشرة وعندك حقل نصي عند اختيار التقرير من القائمة يكتب اسمه في الحقل النصي

وعند امر فتح التقرير يتم فتح التقرير المكتوب اسمه في الحقل النصي ويكون مصدر سجلاته الاستعلام q_1 طالما فتحناه من فورم 1 ويكون مصدرة q_2 اذا فتحناه من فورم2

اذا كان فهمي صحيح ممكنى عمل ذلك وبكود مختصر

نحتاج الى متغير في بداية الاكواد اي يمكن استخدامه في كافة احداث النموذج

تسلم الايادى يا @مبرمج سابق :fff:

يا عالم يا معقدين :eek2:
شايفين البساطة ما شاء الله :yes: 

 

  • Like 1
رابط هذا التعليق
شارك

52 دقائق مضت, ابو جودي said:

شايفين البساطة ما شاء الله

هذا بعض مما لديك استاذ @ابو جودي

48 دقائق مضت, kanory said:

على العموم كل هذه توقعات منكم .. وشكرا الله لكم

صحيح كلامك استاذ العزيز @kanory تتوقف الاجابة على رد السائل او ارفاق مرفق واضح لما يريد فعله بالضبط

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

ولكن اجد استفسار معين ثم اضع رد لكيفية معالجة الامر من وجهة نظري وبابسط صورة ممكنه فان تم الاخذ به والا فليعتبر رفع للموضوع

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

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

اللهم اجعلنا واياكم ممن تعلم العلم وعلمه

تحياتي وتقديري لك ولعل لنا لقاء في موضوع اخر 🌹

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

  • أفضل إجابة
13 دقائق مضت, مبرمج سابق said:

مبرمج سابق جل معلوماته قديمة وحلوله اكل الدهر عليها وشرب

اولا بارك الله فى عمرك وعلمك وعملك وجزاكم كل خير :fff:

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

ثالثا كنت ابلور فكرة من الامس شبيه بفكرة حضرتك

استخدمت الروتين الاتى فى وحدة نمطية

Function OpenReport(ByRef rptName As String, ByRef qryName As String)

On Error GoTo ErrorHandler

  DoCmd.OpenReport rptName, acViewPreview, , , , qryName
  
procDone:
  Exit Function
ErrorHandler:
    MsgBox$ Err.Number & ": " & Err.Description
    Resume procDone
End Function

على ان يتم استدعاءه بالسطر الاتى 

OpenReport("rpt2", "Query2")

نفس فكرة حضرتك

طبعا بسبب الغموض وعدم التوضيح الكافى كنت فى انتظار اضافة المرفق 

Chang Record Sources Report VBA(V3).mdb

  • Like 1
رابط هذا التعليق
شارك

53 دقائق مضت, ابو جودي said:

اولا بارك الله فى عمرك وعلمك وعملك وجزاكم كل خير 

امين اللهم اجعلنا واياكم ممن طال عمره وحسن عمله

53 دقائق مضت, ابو جودي said:

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

اربعة ممن قادوا الثورة الرقميه ليسوا مبرمجين بل بعضهم لا يتعدى تاهيلة التعليم الثانوي

المهم الرغبة والمثابرة والابتكار

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

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

53 دقائق مضت, ابو جودي said:

ثالثا كنت ابلور فكرة من الامس شبيه بفكرة حضرتك

ماشاء الله تبارك الله متميز دائما يا محمد 🌹

تحياتي

  • Thanks 1
رابط هذا التعليق
شارك

3 ساعات مضت, مبرمج سابق said:

اربعة ممن قادوا الثورة الرقميه ليسوا مبرمجين بل بعضهم لا يتعدى تاهيلة التعليم الثانوي

بصراحة استاذ خالد ..الاخوة المصريين يشهد لهم بالبنان في ذلك

وانا بصراحة تعلمت منهم الكثير ...سواء في اختصاصي الهندس (المدني ) او في البرمجة ..اصحاب علم وخلق وجدية في ايصال المعلومة

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

ام الاخوة العمانيين ام السوريين ..ام ام

ربي يحفظ امتنا الاسلامية والعربية

  • Like 3
رابط هذا التعليق
شارك

45 دقائق مضت, Eng.Qassim said:

بصراحة استاذ خالد ..الاخوة المصريين يشهد لهم بالبنان في ذلك

الكل فيهم الخير والبركة وكلنا اخوة

انا ايضا افتخر اني تتلمذت على يد معلمين من مصر والسودان والاردن وسوريا وفلسطين و مدرس واحد عراقي درسني النحو والصرف ومنه عرفت الجواهري والبياتي واحببت ناظم الغزالي

اسمه استاذ هشام رجل خلوق قليل الكلام وان تحدث تتمنى الا يصمت

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

مع الاعتذار لصاحبة الموضوع عن الدخول في حوارات جانبية

تحياتي

  • Haha 1
رابط هذا التعليق
شارك

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.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information