2013-09-16 10 views
10

मैं डेल्फी में डेटासेट से संबंधित निम्नलिखित दो कथनों के बीच अंतर जानना चाहता हूं।डेल्फी में AsInteger और Value के बीच क्या अंतर है?

dsMyDataSet.ParamByName('ID').AsInteger := 1122; //If ID is integer 
dsMyDataSet.ParamByName('ID').AsString := '1122'; //If ID is string 

और

dsMyDataSet.ParamByName('ID').Value := 1122; //ID is string or integer 

इन बयानों क्या एक ही अर्थ ले? क्या "मान" पूर्ण रूप से स्ट्रिंग में पूर्णांक को परिवर्तित करता है?

उत्तर

12

TParam.AsInteger संपत्ति, उदाहरण के लिए, मान और पैरामीटर के डेटा प्रकार सेट करें। TParam.Value वही करता है, लेकिन TParam यह तय करेगा कि किस प्रकार Variant के अंदर मूल्य के लिए मैप किया जाएगा और यह हमेशा आपके द्वारा इच्छित डेटा प्रकार नहीं है।

मैं आपको केवल AsXXX गुणों का उपयोग करके मूल्य निर्धारित करने की सलाह देता हूं, क्योंकि आप पैरामीटर के डेटा प्रकार के नियंत्रण में होंगे, जो पैरामीटर बाध्यकारी त्रुटियों से आपको बचा सकता है।

तो, अपने अंतिम प्रश्न का उत्तर दें: नहीं, मान सही डेटा प्रकार में परिवर्तित नहीं किए जाएंगे, आपको मूल्य निर्दिष्ट करने के लिए सही संपत्ति का चयन करके डेटा प्रकार सेट करना होगा।

+0

@ एनकेपी कृपया जो मैंने लिखा है उसे अवहेलना करें। यह गलत था। –

+0

ठीक डेविड, मेरे संदेह के बारे में क्या: मेरे कोड में, कई स्थानों पर dsMyDataSet.ParamByName ('आईडी')। मूल्य: = 1122; लिखा है। यदि मैं Ctrl + मान पर क्लिक करता हूं, तो यह मुझे संपत्ति पर ले जाता है "संपत्ति मूल्य: AnsiString पढ़ें GetAsAnsiString लिखें SetAsAnsiString;" जो डेटा.डीबीपीएस फ़ाइल लिखा गया है। यह संपत्ति AnsiString देता है। अब अगर मैं "dsMyDataSet.ParamByName ('ID') जैसे बयान लिखता हूं। मान: = myString"। मुझे कंपाइलर चेतावनी मिल जाएगी जो स्ट्रिंग को उत्तर देने के लिए मजबूती से घुमाएगी, जिससे डेटा हानि हो सकती है। मुझे इस चेतावनी को कैसे संभालना चाहिए? –

+0

@ एनकेपी, चेतावनी को हटाने के लिए बस AnsiString को टाइपकास्ट करें। AnsiString ('myString')। –

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