2013-05-15 11 views
25

मेरे पास एक क्वेरी है जो एक दर्जन से अधिक टेबल में शामिल होने के बजाय बड़ी है, और मैं एक आईडी फ़ील्ड (उदा।: between nStartID and nEndID) के आधार पर रिकॉर्ड वापस खींचना चाहता हूं।क्या माइक्रोसॉफ्ट एक्सेस अपडेट क्वेरी में प्रोग्रामेटिक रूप से पैरामीटर पास करना संभव है?

मैंने दो पैरामीटर बनाए और उन्हें मानदंड के रूप में परीक्षण किया और वे ठीक काम करते हैं।

समस्या यह है कि, मुझे इस मुख्य क्वेरी से एक सम्मिलित क्वेरी चलाने की आवश्यकता है, और मुख्य क्वेरी में वे पैरामीटर की आवश्यकता है। इसलिए, मुझे प्रोग्रामेटिक रूप से पैरामीटर पास करने की आवश्यकता है।

किसी के पास यह संकेत है कि यह कैसे किया जा सकता है?

धन्यवाद।

+0

मेरे पास मेरी ज़रूरत का समाधान है, लेकिन यह सुनिश्चित नहीं है कि यह सबसे अच्छा है या नहीं।मैंने nStartID और nEndID के लिए वैश्विक चर बनाए हैं, फिर प्रत्येक के लिए एक फ़ंक्शन बनाएं, जैसे getStartID() और getEndID() जो उन मानों को पढ़ते हैं। तब मैं उन कार्यों को मूल क्वेरी के क्लॉज में उपयोग करता हूं। समाधान का सबसे सुंदर नहीं है, लेकिन यह काम करता है। मैं इस घटना में इसे खोल रहा हूं कि किसी और के पास अनुभव है कि वे दूसरों के लाभ के लिए साझा करना चाहते हैं। आपके सहायक इनपुट के लिए धन्यवाद। – Jav

उत्तर

47

मैं सिर्फ यह परीक्षण किया है और यह प्रवेश में काम करता है 2010

आप मानकों के साथ एक चयन करें क्वेरी है कहते हैं:

PARAMETERS startID Long, endID Long; 
SELECT Members.* 
FROM Members 
WHERE (((Members.memberID) Between [startID] And [endID])); 

आपको लगता है कि क्वेरी सहभागी थे और उसने इसे [startID] और के लिए संकेत देता है [ endID]। यह काम करता है, इसलिए आप उस क्वेरी को [सदस्य सदस्यता] के रूप में सहेजते हैं। ,

UPDATE Members SET Members.age = [age]+1 
WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset]))); 

आपको लगता है कि क्वेरी सहभागी चलाने के लिए और फिर आप [startID] और [endID] के लिए संकेत दिया जाता है और यह अच्छी तरह से काम करता है, ताकि आप के रूप में सहेज:

अब आप एक अद्यतन है कि क्वेरी के आधार पर क्वेरी बनाने [MemberSubsetUpdate]।

आप [startS] और [endID] मानों को [memberSubsetUpdate] के पैरामीटर के रूप में निर्दिष्ट करके वीबीए कोड से [सदस्यससेट अपडेट] चला सकते हैं, भले ही वे वास्तव में [सदस्य सदस्यता] के पैरामीटर हैं। QueryDefs संग्रह का उपयोग कर के बारे में जानकारी के लिए

Sub paramTest() 
    Dim qdf As DAO.QueryDef 
    Set qdf = CurrentDb.QueryDefs("MemberSubsetUpdate") 
    qdf!startID = 1 ' specify 
    qdf!endID = 2 '  parameters 
    qdf.Execute 
    Set qdf = Nothing 
End Sub 
+0

साझा करने के लिए धन्यवाद, मुझे समान कोड मिला है, लेकिन कुछ भी समझाया नहीं गया है। – Jav

4

बहुत धन्यवाद: उन पैरामीटर मान जहां वे आवश्यक हैं करने के लिए "नीचे धीरे-धीरे", और क्वेरी मानवीय हस्तक्षेप के बिना काम करता है! मैं थोड़ी देर के लिए इस बारे में सोच रहा था।

मैंने क्वेरी पैरामीटर वाली तालिका का उपयोग करके VBA का उपयोग किए बिना इसे अलग तरीके से किया।

उदाहरण के लिए: QueryParameters से चयन a_table.a_field, a_table कहां QueryParameters.a_field_min और QueryParameters.a_field_max

बीच a_table.a_field

कहाँ QueryParameters a_field_max

यह भी कर सकते हैं दो क्षेत्रों, a_field_min और के साथ एक मेज है ग्रुप बाय के साथ प्रयोग किया जाए, यदि आप ग्रुप बाय क्लॉज में क्वेरी पैरामीटर फ़ील्ड्स और हैविंग क्लॉज में पैरामीटर फ़ील्ड पर पहला ऑपरेटर शामिल करते हैं।

16

QueryDefs का उपयोग करने का प्रयास करें। पैरामीटर के साथ क्वेरी बनाएँ। फिर इस तरह कुछ उपयोग करें:

Dim dbs As DAO.Database 
Dim qdf As DAO.QueryDef 

Set dbs = CurrentDb 
Set qdf = dbs.QueryDefs("Your Query Name") 

qdf.Parameters("Parameter 1").Value = "Parameter Value" 
qdf.Parameters("Parameter 2").Value = "Parameter Value" 
qdf.Execute 
qdf.Close 

Set qdf = Nothing 
Set dbs = Nothing 
+2

मुझे लगता है कि आप 'qaramf' पैरामीटर (1) जैसे 'पैरामीटर' को भी संदर्भित कर सकते हैं। वैल्यू = "पैरामीटर वैल्यू" '। सुनिश्चित नहीं है कि यह शून्य आधारित है या नहीं। –

+1

यह सही है और मैं पुष्टि करता हूं कि यह शून्य आधारित है। –

1

आप टेम्पपर्स का भी उपयोग कर सकते हैं - नोट '!' वाक्यविन्यास आवश्यक है You can also use TempVars - note '!' syntax is essential

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

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