2008-12-29 23 views
15

मुझे एक मौजूदा एक्सेस एमडीबी मिला है। मैं मौजूदा फॉर्म में एक कमांड बटन जोड़ रहा हूं जो मौजूदा रिपोर्ट चलाता है। परिवर्तन किया जा रहा है कि इस बटन को रिकॉर्ड किए जाने वाले रिकॉर्ड की आईडी वाले पैरामीटर में पास करने की आवश्यकता है - वर्तमान में रिपोर्ट एमडीबी में प्रत्येक रिकॉर्ड पर चलती है।मैं एक रिपोर्ट रिपोर्ट में पैरामीटर को प्रोग्रामेटिक रूप से कैसे पास करूं?

मैंने क्वेरी को बदल दिया है कि आईडी आईडी मान के लिए पैरामीटर का उपयोग करने के लिए रिपोर्ट चलती है, ताकि जब बटन क्लिक किया गया हो तो रिपोर्ट करने के लिए रिकॉर्ड आईडी के लिए एक्सेस प्रॉम्प्ट, और रिपोर्ट की तरह प्रदर्शित होना चाहिए।

हालांकि, मैं अपने जीवन के लिए यह नहीं समझ सकता कि क्वेरी का उपयोग करने के लिए रिपोर्ट में पैरामीटर कैसे पारित किया जाए। मैं यह कैसे कर सकता हूँ?

उत्तर

20

DoCmd.OpenReport विधि विभिन्न तर्क हैं, जिनमें से एक एक कहाँ कथन है:

DoCmd.OpenReport"rptReport", acViewPreview,,"ID=" & Me.ID 

है

expression.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs) 
+0

मुझे लगता है कि यह करने का सबसे साफ तरीका है। –

+0

आह! यह वही है जिसे मैं देख रहा था! धन्यवाद, रेमो। –

+0

मैं एक्सेस 2003 का उपयोग कर रहा हूं, और "कहां कंडीशन" संपत्ति वास्तव में चौथा पैरामीटर है, इसलिए आपको उपरोक्त उदाहरण में केवल दो कॉमा की आवश्यकता है, अर्थात्: DoCmd.OpenReport "rptReport", acViewPreview, "आईडी =" और मुझे .ID –

3

इस प्रकार की समस्या के लिए मेरे सामान्य दृष्टिकोण मापदंड को बचाने के लिए है डेटाबेस में, आमतौर पर एक नियंत्रण तालिका जिसमें एक पंक्ति होती है। फिर अपने मानदंडों का संदर्भ देने के लिए आप पैराथेसिस में एक क्वेरी डालते हैं जो आपके इच्छित मानदंडों का एक मान देता है।

(select reportID from control) 

इस techinque का लाभ यह है कि नियंत्रण तालिका अगली बार जब आप रिपोर्ट को चलाने के लिए सेटिंग याद है: अपने मामले में, यह कुछ ऐसा होगा। बेशक, ReportID एक फार्म में एक फार्म से बंधेगा। मुझे यह तथ्य भी पसंद है कि आपके प्रश्न फ़ॉर्म से अलग हैं; वे रूपों से स्वतंत्र रूप से चलाया जा सकता है।

+0

नियंत्रण तालिका एक अच्छा विचार है, धन्यवाद। – PaulDH

1

क्यों हर कोई इसे इतना जटिल बनाना चाहता है, मुझे नहीं पता।

  1. पैरामीटर के बिना अपनी रिपोर्ट के रिकॉर्डसोर्स को सहेजें।

  2. रेमो द्वारा सुझाए गए अनुसार, DoCmd.OpenReport के उचित तर्क में मानदंड पास करें।

इसे करने का प्रयास करने का प्रयास किसी भी अन्य तरीके से पहुंच में कार्यों को पूरा करने के प्राकृतिक तरीकों का विरोध करने का विषय बनने जा रहा है।

2

docmd.openreport का खंड एक स्ट्रिंग है जो SQL प्रारूप में जहां खंड के समान प्रारूप का उपयोग करता है।

रिपोर्ट के रिकॉर्डसोर्स की बजाय docmd पर आप पैरामीटर को पैरामीटर करने का कारण लचीलापन है। आपको किसी भी पैरामीटर के बिना रिपोर्ट खोलने की आवश्यकता हो सकती है/सभी रिकॉर्ड वापस कर सकते हैं या अलग-अलग क्षेत्रों में फ़िल्टर करने की क्षमता हो सकती है।

1

मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन यह मुझे थोड़ा सा ले गया। त्रुटि "परेड का अमान्य उपयोग" था, हालांकि यह मुद्दा फ़ील्ड नाम में जगह थी। मैं एक डीबी से एक रिपोर्ट बना रहा था कि किसी ने सामान्य गलती, रिक्त स्थान किया था।

डाटाबेस क्षेत्र एक अंतरिक्ष इस उदाहरण का उपयोग किया है जब जहां खंड के माध्यम से एक प्रश्न के लिए एक परम पास करने के लिए:

DoCmd.OpenReport "rptByRegionalOffice", acViewPreview, , "[" & "Regional Office" & "]" & "=" & "'" & cmboOffices.Value & "'" 

आप इस बारे में सोचते हैं, तो आप देख सकते हैं कि इस where [Regional Office]='string value' का उत्पादन करेगा बस के रूप में तुम करोगी एसक्यूएल एक्सेस में उम्मीद है।

+3

आप एक बहुत ही अनावश्यक concatenation करते हैं। आपको वास्तव में आवश्यकता है: "[क्षेत्रीय कार्यालय] = '" और cmboOffices.Value और "'"। और सावधान रहें यदि [क्षेत्रीय कार्यालय] में "" चरित्र शामिल हो सकता है। तारों के लिए डबल कोट्स का उपयोग करने के लिए एक्सेस में सामान्य है, इसलिए: "[क्षेत्रीय कार्यालय] =" और Chr (34) और cmboOffices.Value और Chr (34) –

+3

इसके अलावा, ऑब्जेक्ट नामों में रिक्त स्थान डालना (साथ ही गैर-अल्फान्यूमेरिक वर्ण) बस कुछ ऐसा करना है जो आपको करना बंद कर देना चाहिए। क्योंकि आप कर सकते हैं, बहुत से लोग ऐसा करते हैं, लेकिन ऐसा इसलिए है क्योंकि वे इस तथ्य पर ध्यान नहीं देते हैं कि फ़ील्ड का नाम और उसका कैप्शन अलग से सेट किया जा सकता है, इसलिए क्षेत्रीयऑफिस में "क्षेत्रीय कार्यालय" की कैप्शन संपत्ति हो सकती है। इसका अर्थ यह है कि जब आप इसे किसी फॉर्म या रिपोर्ट पर छोड़ देते हैं, तो यह स्वचालित रूप से मानव-अनुकूल कैप्शन (रिक्त स्थान के साथ) होगा, जबकि फ़ील्ड नाम एसक्यूएल-फ्रेंडली है (यानी, कोई ब्रैकेट की आवश्यकता नहीं है)। –

संबंधित मुद्दे