स्टैक ओवरफ्लो पर कई प्रश्न हैं जो ऐसे उत्तर हैं जो एडीओ/ओलेडीबी, डेल्फी टैडोक्वायर/टैडोकॉमैंड और पैरामीटर के विषय पर एक दूसरे के विरोधाभास करते हैं।कुछ मामलों में एडीओ घटक, विशेष रूप से TADOCommand, गैर-नामित, या नामित पैरामीटर के साथ अधिक विश्वसनीय रूप से काम करते हैं?
पैरामीटर को एडीओ घटक की कमांडटेक्स्ट या एसक्यूएल संपत्ति में दो तरीकों से पेश किया जा सकता है। मेरे लिए समय की
select a, b, c from bar where bat = :baz
यह काम करता है, 99% ठीक: नामांकित पैरामीटर, जो मेरे लिए समय की सबसे काम करते हैं, कोलन के साथ पेश कर रहे हैं। हर अब और फिर मुझे लगता है कि एडीओ या इसके आसपास डेल्फी के रैपर, स्वीकार नहीं करेंगे ": baz" और आवश्यकता है कि मैं इस के बजाय लिखें:
select f, g, h from bar where bat = ?
यह एक नामित पैरामीटर के बजाय एक अनाम पैरामीटर में परिणाम है,। जब एक एडीओ क्वेरी या एडीओ कमांड में केवल एक पैरामीटर होता है, तो यह एक बड़ा सौदा नहीं है। लेकिन ऐसा नहीं है जब एडीओ मुझ पर काम करता है। कल यह एक तरह से, और आज, एक भी TADOCommand वस्तु में एक दोहरे आदेश, इस तरह से एक अलग तरह से काम किया, एक CommandText स्ट्रिंग में दो आदेशों के साथ:
delete from bar where id = :id1
delete from bat where id = :id2
मैं इस के लिए बदलना पड़ा:
delete from bar where id = ?
delete from bat where id = ?
यह कल पूरे दिन काम करता था। आज, मुझे इसे काम करने के लिए इसे पहले संस्करण में बदलना पड़ा। लक्षण यह था कि एडीओ पैरामीटर गायब हो गए और वापस नहीं आएंगे, और जब मैं कमांड निष्पादित करने का प्रयास करता हूं तो मुझे Parameters[0]
तक पहुंचने का प्रयास करते समय त्रुटि से बाहर सूचकांक मिलता है। कुछ भी मुझे कोई चेतावनी नहीं देता है कि पैरामीटर दूर जा रहे हैं। ऐसा लगता है कि एडीओ डेटासेट के लिए कुछ कनेक्शन, डिज़ाइनटाइम पर, TADOCommand
घटक विशेष रूप से जॉग करते हैं, और यह "बस मुझ पर टूट जाता है"। जब आप कोई प्रश्न या कमांड लिखने की कोशिश कर रहे हैं तो यह विशेष रूप से गड़बड़ कर रहा है, और आप जानते हैं कि यह काम करता है, लेकिन एडीओ घटक ने "स्वीकार नहीं किया" या ": एक्स" अभी अभी। आप एक से दूसरी तरफ स्विच करके काम करने की कुल असमर्थता प्राप्त कर सकते हैं। लेकिन यह मुझे निराश करता है, और शायद वास्तव में अन्य लोगों को पूरी तरह से अवरुद्ध करता है। मुझे पता है कि कुछ लोग हमेशा गतिशील रूप से कोड में अपने एसक्यूएल का निर्माण करते हैं, और Parameters
का उपयोग करने से बचते हैं, और शायद यही कारण है कि।
मेरे सवाल का संभावित उत्तर है कि मैं कर रहा हूँ की आशंका कर रहे हैं:
एडीओ कई आदेशों का समर्थन नहीं करता, या कम से कम डेल्फी के रैपर नहीं है। या शायद
TADOCommand
बस विश्वसनीय रूप से यहां काम नहीं करता है।पैरामीटर सभी एडीओ, या डेल्फी के एडीओ रैपर में एक छोटी गाड़ी क्षेत्र हैं?
आप इसे गलत कर रहे हैं।
मैं डेल्फी एक्सई 2 का उपयोग कर रहा हूं, लेकिन मैंने 2007, 200 9, 2010 और एक्सई में इसी तरह के डोडी व्यवहार को देखा है। मैं अपने ओएलडीडीबी प्रदाता के रूप में SQL सर्वर के लिए माइक्रोसॉफ्ट ओएलडीडीबी प्रदाता का उपयोग कर रहा हूं।
यदि आप दोनों आदेशों को एक सेमी-कोलन के साथ (SQL सर्वर के लिए) अलग करते हैं तो क्या इससे कोई फर्क पड़ता है? –
उन परियोजनाओं में जिन्हें डेटा-जागरूक नियंत्रण की आवश्यकता नहीं है, मैंने कुछ बार एडीओडीबी और एडीओआईएनटी का उपयोग करने के लिए स्विच किया है। यहां की तरह: http://xxm.svn.sourceforge.net/viewvc/xxm/trunk/Delphi/demo2/03%20Data/xxmData.pas?view=markup मैंने यह जांच नहीं की है कि यह प्रदर्शन के लिए क्या करता है, लेकिन वास्तव में इन दिनों में से किसी एक को जांचें (और मेरे परिणाम यहां उत्तर के रूप में पोस्ट करें) ... –
मूक: मैं अर्धविराम का प्रयास करूंगा। मेरी यादें यह है कि डेल्फी एडीओ घटक अलग-अलग सेपरेटर का समर्थन नहीं करते हैं। –