2012-01-16 14 views
8

मैं बहुत डेल्फी के लिए नया हूँ और कोड का निम्न भाग (बाहर छोड़ दिया कुछ अप्रासंगिक भागों) है जिसके लिए मैं समझने के लिए यह क्या करता है कोशिश कर रहा हूँ प्राप्त किया:क्या होता है यदि मैं ParamByName को ऐसे पैरामीटर के लिए कॉल करता हूं जो मौजूद नहीं है?

object SelectCosts: TIBQuery 
    SQL.Strings = (
     'SELECT * FROM costs ' 
     'WHERE code = :code') 
    ParamData = < 
     item 
     DataType = ftUnknown 
     Name = 'code' 
     ParamType = ptUnknown 
     end> 
    end 

अन्य फ़ाइल में, कि क्वेरी प्रयोग किया जाता है , लेकिन एक पैरामीटर जो क्वेरी में परिभाषित नहीं है जोड़ा गया है।

DM_HRV.SelectCosts.ParamByName('part').Value := 1; 

इस पैरामीटर बनाया चयन के बारे में कुछ भी बदल 'part' करता है? दूसरे शब्दों में: क्या SQL क्वेरी स्वचालित रूप से निम्न में बदल गई है?

'SELECT * FROM costs ' 
    'WHERE code = :code' 
    'AND part = :part' 
+2

मैं दृढ़ता से SQL को गतिशील रूप से सेट करने की अनुशंसा करता हूं, इसे घटक में सेट करना कई भविष्य की त्रुटियों के लिए प्रवण है। – ComputerSaysNo

+0

@DorinDuminica यह मेरा स्वयं का कोड नहीं है, लेकिन मुझे यह जांचने के लिए कोड की समीक्षा करने की आवश्यकता है कि यह क्या करता है। हालांकि जानकारी के लिए धन्यवाद, यह भविष्य में सहायक हो सकता है! – Maza89

+1

@DorinDuminica: अब तक ध्यान नहीं दिया है! हालांकि, मुझे एहसास है कि मैं अभी भी भविष्य में उनका सामना कर सकता हूं। इसके संदर्भ में, आप 'बहुत से संभावित त्रुटियों के बारे में बात कर रहे हैं' के बारे में भी कुछ सुनना वाकई दिलचस्प होगा। –

उत्तर

8

इसका मतलब है कि एसक्यूएल कथन रन-टाइम पर बदला जा सकता है। इसलिए जब उस क्वेरी का उपयोग किया जाता है तो SQL में पहले से ही AND part = :part शामिल है।

यदि SQL कथन में यह अतिरिक्त पैरामीटर part नहीं है, तो ParamByName('part').Value := 1 असाइन करते समय एक अपवाद उठाया जाएगा।

मुझे लगता है कि आपने SelectCosts संदर्भ (जो DM_HRV में है और अन्य डीएम नहीं) को भ्रमित नहीं किया है।

DM_HRV.SelectCosts.ParamByName('part').Value := 1; 

क्रम में एक पैरामीटर जोड़ने के लिए, इस प्रकार CreateParam का उपयोग करें::

if DM_HRV.SelectCosts.Params.FindParam('Part') = nil then 
    DM_HRV.SelectCosts.Params.createParam(ftString, 'Part', ptInput); 

क्वेरी नहीं करता

+1

या, हालांकि कम संभावना है, क्वेरी को पूरी तरह से अलग जगह में बदला जा सकता है, आप कभी नहीं जानते। –

+0

@ कोबिक धन्यवाद, बिल्कुल मैंने जो पहले सोचा था। @AndriyM यद्यपि यह आपके लिए कम संभावना प्रतीत होता है, मैंने पाया कि यह वास्तव में एक पूरी तरह से अलग जगह में बदल गया था। क्वेरी टेक्स्ट को 'चयन * लागत से बदल दिया गया था जहां कोड = कोड और भाग =: भाग और वर्ष =: वर्ष' – Maza89

+0

@ माजा89: ठीक है यह पता लगाना! –

0

नया पैरामीटर जोड़ना क्वेरी को नहीं बदलता है। आपको वह खुद करना है।

4

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

आपके पहले स्निप में, पैराम टाइप और इनपुट टाइप परिभाषित नहीं हैं, आप पैरामीटर सूची (पैराम्स) प्रॉपर्टी एडिटर तक पहुंचकर और उन मानों को अपडेट करके आईडीई में बदल सकते हैं।

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

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