MS ACCESS 2003 - سؤال حول تمرير المعلومات من نموذج غير منضم إلى تقرير
-
20-09-2019 - |
سؤال
أستخدم شيئًا مثل أدناه لتمرير المعلومات من نموذج غير منضم إلى نموذج آخر (أعذر التحقق من عدم وجود أخطاء):
Sub Button_Click()
Dim db as DAO.database
Dim rs as DAO.recordset
Dim sql as string
docmd.openform "NextFormIamAbouttoUse"
sql = "SELECT * FROM tblMain WHERE MainID = " & Me.As_MainID & ";"
' usually debug here
set db = currentdb
set rs = db.openrecordset(sql)
if rs.eof then
msgbox "oops message"
else
rs.movefirst
[Forms]![NextFormIamAbouttoUse].as_mainID = rs![MainID]
[forms]![NextFormIamAbouttoUse].value1 = rs![value1]
' etc
rs.close
set db = nothing
set rs = nothing
sql = ""
end if
'error stuff
end sub
حسنًا، هل يمكنني استخدام هذا النوع من الأشياء لنقل المعلومات من النماذج إلى التقارير أيضًا؟أرى أنني أستخدم الكثير من النماذج المليئة بمربعات النص كلوحات معلومات، حيث لا تخدم مربعات النص أي غرض إدخال، بل تعرض معلومات سريعة بدلاً من ذلك.
يتنقل المستخدم عبر نماذج مختلفة لإنشاء نماذج "تشبه لوحة المعلومات" حسب رغبته ثم يرغب في طباعتها في مرحلة ما.لذلك أردت إنشاء تقارير مشابهة (من حيث البيانات المقدمة) في كل نقطة حتى يتمكنوا من طباعة صفحة المعلومات التي قاموا بإنشائها من خلال هذه النماذج.
لذلك حاولت القيام بذلك باستخدام تقرير:
Sub Button_Click()
Dim db as DAO.database
Dim rs as DAO.recordset
Dim sql as string
docmd.openreport "ReportTester", acViewPreview
sql = "SELECT * FROM tblMain WHERE MainID = " & Me.As_MainID & ";"
' usually debug here
set db = currentdb
set rs = db.openrecordset(sql)
if rs.eof then
msgbox "oops message"
else
rs.movefirst
[reports]![ReportTester].as_mainID = rs![MainID]
[reports]![ReportTester].value1 = rs![value1]
' etc
rs.close
set db = nothing
set rs = nothing
sql = ""
end if
'error stuff
end sub
مجرد تخمين، ولم ينجح.لا أخطاء، أو أي شيء.فقط لن يتم عرض أي معلومات بهذه الطريقة.لن يمرر حتى رقم الهوية.
لذلك أعتقد أن فتح التقرير في AcViewPreview يعني أنه لا يمكنني إضافة معلومات إلى مربعات النص هذه بعد حدوثها، لكنني لست متأكدًا.لذا فإن أي نصيحة حول هذا الأمر موضع تقدير كبير.شكرًا!
المحلول
لديك عدد قليل من الخيارات.يمكنك إما إنشاء استعلام وتمرير قيم عنصر تحكم النموذج إلى القيم هناك، وبالتالي إنشاء استعلام سجل واحد، والذي يمكنك بناء تقريرك عليه.
سيبدو كل عمود كما يلي: بيانات:النماذج![MyForm]![MyControl]
أو يمكنك فقط ربط عناصر التحكم من النموذج مباشرة بعناصر تحكم التقرير.
ستحتاج إلى ترك النموذج مفتوحًا يحتوي على القيم أثناء فتح التقرير، إذا اخترت أيًا من هذه المسارات.لا حاجة إلى رمز معقد.
نصائح أخرى
وأعتقد أنا في عداد المفقودين شيء. لماذا لا لديك فقط مصدر_سجلات التقرير يكون هو نفسه مصدر السجل للنموذج، ومن ثم تصفية في وقت لMainID سيما في الوسيطة wherecondition لDoCmd.OpenReport على ذلك؟ ثم يمكنك تشغيل التقرير دون الحاجة لفتح النموذج.
وإذا لم النموذج غير منضم، أو لديه الحقول التي هي مكلفة لحساب على الطاير، لا أستطيع أن أرى أي ميزة لربط التقرير إلى النموذج على الإطلاق.