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

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

قام بنشر

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

 

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

كيف استخدم المتغير 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
قام بنشر

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

  في 26‏/6‏/2022 at 10:11, Lamyaa said:

Dim strReportName As String

strReportName = Me.ReportName

Expand  

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

Public x As String

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

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

 

  • Like 1
  • Thanks 1
قام بنشر

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

 

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

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

  • Thanks 1
  • Haha 1
قام بنشر
  في 26‏/6‏/2022 at 16:30, Eng.Qassim said:

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

Expand  

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

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

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

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

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

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

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

NewName هنا يساوي r_2

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

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

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

 

  • Thanks 1
قام بنشر
  في 26‏/6‏/2022 at 11:40, مبرمج سابق 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

Expand  

 

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

 

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

 

يوجد لدي عدة تقارير : 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"

 

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

  في 26‏/6‏/2022 at 13:50, Eng.Qassim said:

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

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

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

Reports(strReportName).Caption = "ct17R2"

 

Expand  

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

 

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

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

  • Confused 1
قام بنشر
  في 26‏/6‏/2022 at 19:03, مبرمج سابق said:

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

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

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

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

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

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

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

NewName هنا يساوي r_2

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

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

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

 

Expand  

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

قام بنشر
  في 26‏/6‏/2022 at 14:08, مبرمج سابق said:

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

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

Public x As String

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

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

 

Expand  

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

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

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

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

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

 

قام بنشر

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

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

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

 

Chang Record Sources Report.mdbFetching info...

  • Like 2
  • Thanks 1
قام بنشر
  في 26‏/6‏/2022 at 20:39, ابو جودي said:

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

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

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

Expand  

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

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.mdbFetching info...

  • Like 3
  • Thanks 1
قام بنشر
  في 26‏/6‏/2022 at 21:16, Barna said:

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

Expand  

جزاكم الله خيرا استاذى الجليل ومعلمى القدير الاستاذ @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.mdbFetching info...

  • Like 1
  • Thanks 1
قام بنشر
  في 26‏/6‏/2022 at 20:13, Eng.Qassim said:

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

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

Expand  

استاذي القدير قاسم الامر موجود ضمن اوامر فيجول بيسك وهو موجود بالصيغة الموضحة بالرد السابقة وايضا موجود ضمن اوامر 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
قام بنشر
  في 27‏/6‏/2022 at 08:59, مبرمج سابق said:

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

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

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

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

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

Expand  

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

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

 

  • Like 1
قام بنشر

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

  • Like 2
  • Thanks 1
قام بنشر
  في 27‏/6‏/2022 at 12:56, ابو جودي said:

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

Expand  

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

  في 27‏/6‏/2022 at 13:00, kanory said:

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

Expand  

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

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

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

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

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

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

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

  • Like 1
  • Thanks 1
  • تمت الإجابة
قام بنشر
  في 27‏/6‏/2022 at 13:50, مبرمج سابق said:

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

Expand  

اولا بارك الله فى عمرك وعلمك وعملك وجزاكم كل خير :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).mdbFetching info...

  • Like 1
قام بنشر
  في 27‏/6‏/2022 at 14:15, ابو جودي said:

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

Expand  

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

  في 27‏/6‏/2022 at 14:15, ابو جودي said:

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

Expand  

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

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

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

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

  في 27‏/6‏/2022 at 14:15, ابو جودي said:

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

Expand  

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

تحياتي

  • Thanks 1
قام بنشر
  في 27‏/6‏/2022 at 15:04, مبرمج سابق said:

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

Expand  

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

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

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

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

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

  • Like 3
قام بنشر
  في 27‏/6‏/2022 at 19:09, Eng.Qassim said:

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

Expand  

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

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

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

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

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

تحياتي

  • 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