मैं एमएस एक्सेस क्वेरी पैरामीटर वैकल्पिक कैसे बना सकता हूं?

मेरे पास एक प्रश्न है कि मैं अलग-अलग तरीकों से अलग-अलग तरीकों से फ़िल्टर करना चाहता हूं। जिस तरह से मैंने प्रासंगिक प्रश्न फ़ील्ड के मानदंड क्षेत्र में पैरामीटर रखकर अभी यह किया है, हालांकि ऐसे कई मामले हैं जिनमें मैं किसी दिए गए फ़ील्ड पर फ़िल्टर नहीं करना चाहता हूं बल्कि केवल अन्य क्षेत्रों में फ़िल्टर करना चाहता हूं। क्या कोई तरीका है जिसमें किसी प्रकार का वाइल्डकार्ड मापदंड पैरामीटर को पारित किया जा सकता है ताकि मैं क्वेरी के उस विशेष कॉल के लिए फ़िल्टरिंग को बाईपास कर सकूं?

0

6 उत्तर

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

फ्लाई पर सहेजी गई क्वेरी को फिर से लिखना और फिर उस तक पहुंचने के लिए एक बहुत ही हैशिप तरीका होगा; हालांकि, यदि आपके पास एक ही डीबी का उपयोग कर कई लोग हैं तो आप विवादों में भाग ले सकते हैं, और आप अगले डेवलपर को लाइन के नीचे भ्रमित कर देंगे।

आप क्वेरी में डिफ़ॉल्ट रूप से डिफ़ॉल्ट मान भी पारित कर सकते हैं (जैसा कि आपने पिछले प्रश्न में चर्चा की थी)

0
जोड़ा

अपने पिछले प्रश्न में मेरे पिछले परीक्षा में वापस। आपकी पैरामीटरयुक्त क्वेरी एक स्ट्रिंग है जो इस तरह दिख रही है:

qr = "Select Tbl_Country.* From Tbl_Country WHERE id_Country = [fid_country]"

fid_Country (संख्या, पाठ, guid, दिनांक, आदि) की प्रकृति के आधार पर, आपको इसे जोकर मान और विशिष्ट सीमा वर्णों से प्रतिस्थापित करना होगा:

qr = replace(qr,"[fid_country]","""*""")

जंगली कार्ड को पूरी तरह से अनुमति देने के लिए, आपकी मूल क्वेरी भी हो सकती है:

qr = "Select Tbl_Country.* From Tbl_Country _
      WHERE id_Country LIKE [fid_country]"

फिर आप fid_Country जैसे जंगली कार्ड मान प्राप्त कर सकते हैं

qr = replace(qr,"[fid_country]","G*")

एक बार जब आप इसके साथ काम कर लेंगे, तो आप एक रिकॉर्डसेट खोलने के लिए स्ट्रिंग का उपयोग कर सकते हैं

set rs = currentDb.openRecordset(qr)
0
जोड़ा

यदि आप अपनी क्वेरी बनाते हैं तो:

PARAMETERS ParamA Text ( 255 );
SELECT t.id, t.topic_id
FROM SomeTable t
WHERE t.id Like IIf(IsNull([ParamA]),"*",[ParamA])

पैरामीटर भरने पर सभी रिकॉर्ड चुने जाएंगे।

0
जोड़ा
एक वैकल्पिक ग्रुप द्वारा के लिए एक ही काम करता है?
जोड़ा लेखक Chad, स्रोत
@ चाड मुझे यकीन नहीं है कि आपका क्या मतलब है, शायद <�कोड> पैरामीटर परमा पाठ (255); चयन IIF (IsNull ([पैरामा]), "*", [पैरामा]) AS Expr1, तालिका 1 से टी.आईडी टी समूह द्वारा आईएसएफ (इस्नुल ([पैरामा]), "*", [पैरामा]), टी। आईडी हैविंग ((टी.आईडी) IIF की तरह (IsNull ([पैरामा]), "*", [पैरामा]));
जोड़ा लेखक Fionnuala, स्रोत

मुझे नहीं लगता कि आप कर सकते हैं। आप क्वेरी कैसे चला रहे हैं?

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

0
जोड़ा

खैर, आप मौजूदा फ़िल्टर में उपयोग नहीं करना चाहते फ़ील्ड के पैरामीटर के रूप में * पास करके गैर-शून्य मान वापस कर सकते हैं। एक्सेस 2003 (और संभवतः पहले और बाद के संस्करणों) में, यदि आप एक संख्यात्मक, टेक्स्ट, दिनांक, या बूलियन फ़ील्ड के लिए अपने मानदंड के रूप में जैसे [paramName] का उपयोग कर रहे हैं, तो एक तारांकन सभी रिकॉर्ड प्रदर्शित करेगा (वह आपके द्वारा निर्दिष्ट अन्य मानदंडों से मेल खाते हैं)। यदि आप शून्य मानों को भी वापस करना चाहते हैं, तो आप मानदंड के रूप में जैसे [paramName] या Null का उपयोग कर सकते हैं ताकि यह सभी रिकॉर्ड लौटा सके। (यदि आप कोड में क्वेरी बना रहे हैं तो यह सबसे अच्छा काम करता है। यदि आप मौजूदा क्वेरी का उपयोग कर रहे हैं, और जब आप फ़िल्टरिंग के लिए मान रखते हैं तो आप शून्य मान वापस नहीं करना चाहते हैं, यह काम नहीं करेगा।)

यदि आप मेमो फ़ील्ड को फ़िल्टर कर रहे हैं, तो आपको एक और दृष्टिकोण आज़माएं।

0
जोड़ा

* वाइल्डकार्ड LIKE कीवर्ड के साथ नोट करें केवल एएनएसआई -88 क्वेरी मोड में वांछित प्रभाव होगा।

कई लोग गलती से मानते हैं कि एक्सेस/जेट में वाइल्डकार्ड चरित्र हमेशा * है। ऐसा नहीं। जेट में दो वाइल्डकार्ड हैं: ANSI-92 क्वेरी मोड में% और * एएनएसआई -88 क्वेरी मोड में।

एडीओ हमेशा एएनएसआई-9 2 है और डीएओ हमेशा एएनएसआई -8 9 है लेकिन एक्सेस इंटरफेस या तो हो सकता है।

किसी डेटाबेस ऑब्जेक्ट में LIKE कीवर्ड का उपयोग करते समय (यानी कुछ जो mdb फ़ाइल में जारी रहेगा), आपको अपने आप को सोचना चाहिए: अगर कोई व्यक्ति आमतौर पर स्वयं का उपयोग करने के अलावा क्वेरी मोड का उपयोग करके इस डेटाबेस का उपयोग करता है तो क्या होगा? मान लें कि आप टेक्स्ट फ़ील्ड को केवल संख्यात्मक वर्णों तक ही सीमित करना चाहते हैं और आपने अपना सत्यापन नियम इस तरह लिखा होगा:

NOT LIKE "*[!0-9]*"

यदि कोई व्यक्ति एडीओ के माध्यम से आपके .mdb से अनजाने में (या अन्यथा) कनेक्ट होता है तो उपरोक्त सत्यापन नियम उन्हें गैर-संख्यात्मक वर्णों के साथ डेटा जोड़ने की अनुमति देगा और आपकी डेटा अखंडता को गोली मार दी जाएगी। अच्छा नही।

एएनएसआई क्वेरी मोड दोनों के लिए हमेशा कोड करने के लिए बेहतर आईएमओ। शायद यह दोनों मोड्स के लिए स्पष्ट रूप से कोडिंग द्वारा सर्वोत्तम रूप से हासिल किया जाता है।

NOT LIKE "*[!0-9]*" AND NOT LIKE "%[!0-9]%"

लेकिन अधिक शामिल जेट एसक्यूएल डीएमएल/डीडीएल के साथ, यह संक्षेप में प्राप्त करने के लिए बहुत मुश्किल हो सकता है। यही कारण है कि मैं ALIKE कीवर्ड का उपयोग करने की अनुशंसा करता हूं, जो क्वेरी मोड के बावजूद ANSI-92 क्वेरी मोड वाइल्डकार्ड वर्ण का उपयोग करता है।

NOT ALIKE "%[!0-9]%"

नोट ALIKE अनियंत्रित है (और मुझे लगता है कि यही कारण है कि मेरी मूल पोस्ट को चिह्नित किया गया है)। मैंने जेट 3.51 (एक्सेस 97), जेट 4.0 (एक्सेस 2000 से 2003) और एसीई (एक्सेस 2007) में इसका परीक्षण किया है और यह ठीक काम करता है। मैंने इसे पहले न्यूज़ ग्रुप में पोस्ट किया है और एक्सेस एमवीपी की मंजूरी दे दी है। आम तौर पर मैं खुद को अनियंत्रित विशेषताओं से स्पष्ट करता हूं लेकिन इस मामले में अपवाद करता हूं क्योंकि जेट को लगभग एक दशक तक बहिष्कृत कर दिया गया है और एक्सेस टीम जो इसे जीवित रखती है, इंजनों में गहरे बदलाव करने में रुचि नहीं लगती है (या बग फिक्स! ), जिसका जेट इंजन को एक बहुत स्थिर उत्पाद बनाने का असर पड़ता है।

जेट के एएनएसआई क्वेरी मोड पर अधिक जानकारी के लिए, एएनएसआई एसक्यूएल क्वेरी मोड के बारे में

0
जोड़ा
असल में, वाइल्डकार्ड यह भी निर्भर करेगा कि आप किस डेटा इंटरफेस का उपयोग कर रहे हैं। SQL सर्वर के विरुद्ध एडीओ के माध्यम से निष्पादित एसक्यूएल में, उदाहरण के लिए, आप जेट एसक्यूएल "*" के बजाय "%" का उपयोग करते हैं।
जोड़ा लेखक David-W-Fenton, स्रोत
दरअसल, जेट में दो वाइल्डकार्ड हैं: एएनएसआई-9 2 क्वेरी मोड में "%" और एएनएसआई -8 9 क्वेरी मोड में "*"। एडीओ हमेशा एएनएसआई-9 2 है, डीएओ हमेशा एएनएसआई -8 9 है और एक्सेस इंटरफ़ेस भी हो सकता है। आपको इसके बारे में पता नहीं हो सकता क्योंकि आप हमेशा डीएओ का उपयोग करते हैं।
जोड़ा लेखक onedaywhen, स्रोत
@ एयर लिंक अब तय है।
जोड़ा लेखक onedaywhen, स्रोत
धन्यवाद। मुझे एक वर्तमान यूआरएल खोजने का सबसे पुराना समय था जिसमें वर्णित सामग्री लगती थी - लेकिन शायद कोई नहीं है। 2010 में यह कितना हद तक और एक्सेस के बाद के संस्करणों के बारे में अधिक जानकारी नहीं मिल सकती है।
जोड़ा लेखक Air, स्रोत