गतिशील रूप से डेटाबेस कनेक्शन स्ट्रिंग का निर्माण कैसे करें

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

कनेक्शन-पर-मक्खी

यदि आप dbGo (ADO) घटकों का उपयोग कर रहे थे, तोसंबंध तार की संपत्ति TADOConnection डेटा स्टोर के लिए कनेक्शन जानकारी निर्दिष्ट करता है।

जाहिर है, विभिन्न मशीनों पर चलने वाले डेटाबेस एप्लिकेशन बनाते समय, डेटा स्रोत के कनेक्शन को निष्पादन योग्य में हार्ड-कोड नहीं किया जाना चाहिए। दूसरे शब्दों में, डेटाबेस उपयोगकर्ता के कंप्यूटर पर कहीं भी स्थित हो सकता है (या किसी अन्य पर) एक नेटवर्क में कंप्यूटर) - TADOConnection ऑब्जेक्ट में उपयोग किए जाने वाले कनेक्शन स्ट्रिंग को बनाया जाना चाहिए भागो समय कनेक्शन स्ट्रिंग मापदंडों को संग्रहीत करने के लिए सुझाए गए स्थानों में से एक है विंडोज रजिस्ट्री (या, आप "सादे" का उपयोग करने का निर्णय ले सकते हैं INI फाइलें).

सामान्य तौर पर, आपके पास चलाने के समय कनेक्शन स्ट्रिंग बनाने के लिए
क) रजिस्ट्री में डेटाबेस के लिए पूर्ण पथ रखें; तथा
ख) हर बार जब आप अपना आवेदन शुरू करते हैं, रजिस्ट्री से जानकारी पढ़ें, "कनेक्शनस्ट्रीमिंग" बनाएं और ADOConnection को "खोलें"।

instagram viewer

डेटाबेस... जुडिये!

इस प्रक्रिया को समझने में आपकी मदद करने के लिए, हमने एक नमूना "कंकाल" अनुप्रयोग बनाया है जिसमें एक फॉर्म (आवेदन का मुख्य रूप) और एक डेटा मॉड्यूल है। डेल्फी के डेटा मॉड्यूल एक सुविधाजनक संगठनात्मक उपकरण प्रदान करते हैं जो आपके एप्लिकेशन के उन हिस्सों को अलग करने के लिए उपयोग किया जाता है जो डेटाबेस कनेक्टिविटी और व्यावसायिक नियमों को संभालते हैं।

OnCreate डेटा मॉड्यूल की घटना वह जगह है जहां आप कोड को गतिशील रूप से कनेक्शनस्ट्रिंग का निर्माण करते हैं और डेटाबेस से कनेक्ट करते हैं।

प्रक्रिया TDM.DataModuleCreate (प्रेषक: TObject); शुरूअगर DBConnect फिर
ShowMessage ('डेटाबेस से जुड़ा हुआ!')
अन्य
ShowMessage ('डेटाबेस से जुड़ा नहीं है!'); समाप्त;

ध्यान दें: डेटा मॉड्यूल का नाम "डीएम" है। TADOConnection घटक का नाम "AdoConn" है।

DBConnect फ़ंक्शन डेटाबेस से जुड़ने का वास्तविक कार्य करता है, यहां कोड है:

समारोहtion TDM.DBConnect: बूलियन; वर
conStr: स्ट्रिंग; ServerName, DBName: स्ट्रिंग; शुरूServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'प्रदाता = sqloledb?' + 'डेटा स्रोत =' + सर्वरनाम + ';' + 'आरंभिक सूची =' + DBName + ';' + 'यूजर आईडी = myUser; पासवर्ड = myPasword '; परिणाम: = असत्य; AdoConn। बंद करे; AdoConn। कनेक्शनस्ट्रिंग: = कॉनस्ट्र्र; AdoConn। LoginPrompt: = गलत;अगर (नहीं AdoConn। जुड़े हुए) फिरप्रयत्न
AdoConn। खुला हुआ; परिणाम: यह सच है =; के सिवायपर E: अपवाद करशुरूMessageDlg ('से कनेक्ट करने में एक त्रुटि हुई थी। डेटाबेस। त्रुटि: '+ # 13 # 10 + इ। संदेश, mtError, [mbOk], 0);अगरनहीं TDatabasePromptForm। निष्पादित करें (ServerName, DBName)
फिर
परिणाम: = असत्य। अन्यशुरू
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // इस फ़ंक्शन को याद करें
परिणाम: = DBConnect; समाप्त; समाप्त; समाप्त; समाप्त; //DBConnect

DBConnect फ़ंक्शन MS SQL सर्वर डेटाबेस से कनेक्ट होता है - स्थानीय का उपयोग करके कनेक्शनस्ट्रिंग का निर्माण किया जाता है connStr चर।

डेटाबेस सर्वर का नाम इसमें संग्रहीत है सर्वर का नाम चर, डेटाबेस का नाम में आयोजित किया जाता है dBNAME चर। फ़ंक्शन रजिस्ट्री से उन दो मूल्यों को पढ़कर शुरू होता है (कस्टम का उपयोग करके ReadRegistry () प्रक्रिया)। एक बार जब कनेक्शनस्ट्रीमिंग इकट्ठी हो जाती है, तो हम बस कॉल करते हैं AdoConn। खुला हुआ तरीका। यदि यह कॉल "सही" है, तो हम डेटाबेस से सफलतापूर्वक जुड़े हैं।

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

यदि कोई अपवाद होता है, तो "मज़ा" शुरू होता है। जबकि ओपन विधि के विफल होने के कई कारण हो सकते हैं, मान लें कि सर्वर नाम या डेटाबेस का नाम खराब है।
यदि यह मामला है, तो हम कस्टम संवाद फ़ॉर्म प्रदर्शित करके उपयोगकर्ता को सही पैरामीटर निर्दिष्ट करने का मौका देंगे।
नमूना अनुप्रयोग में एक अतिरिक्त रूप (डेटाबेसप्रोफ़ॉर्म) भी होता है जो उपयोगकर्ता को कनेक्शन घटक के लिए सर्वर और डेटाबेस का नाम निर्दिष्ट करने में सक्षम बनाता है। यह सरल रूप केवल दो संपादन बक्से प्रदान करता है, यदि आप अधिक उपयोगकर्ता-अनुकूल इंटरफ़ेस प्रदान करना चाहते हैं, तो आप कर सकते हैं दो कॉम्बो बॉक्स जोड़ें और उपलब्ध एसक्यूएल सर्वर की गणना करके और SQL सर्वर पर डेटाबेस को पुनः प्राप्त करके भरें।

DatabasePrompt प्रपत्र एक कस्टम प्रदान करता है कक्षा विधि Execute नाम जो दो चर (var) मापदंडों को स्वीकार करता है: ServerName और DBName।

उपयोगकर्ता (सर्वर और डेटाबेस के नाम) द्वारा प्रदान किए गए "नए" डेटा के साथ, हम बस DBConnect () फ़ंक्शन को फिर से (पुनरावर्ती) कहते हैं। बेशक, जानकारी पहले रजिस्ट्री में संग्रहीत की जाती है (एक अन्य कस्टम विधि का उपयोग करते हुए: WriteRegistry)।

सुनिश्चित करें कि DataModule पहला "फ़ॉर्म" बनाया गया है!

यदि आप इस सरल प्रोजेक्ट को अपने दम पर बनाने का प्रयास करते हैं, तो आप अनुप्रयोग चलाते समय एक्सेस उल्लंघन अपवादों का अनुभव कर सकते हैं।
डिफ़ॉल्ट रूप से, एप्लिकेशन में जोड़ा गया पहला फॉर्म MainForm (पहला बनाया गया) होना चाहिए। जब आप एप्लिकेशन में एक डेटा मॉड्यूल जोड़ते हैं, तो डेटा मॉड्यूल को "ऑटो-क्रिएट फॉर्म" की सूची में जोड़ा जाता है जो मुख्य फॉर्म के बाद बनता है।
अब, यदि आप मेनफ़ॉर्म की ऑनक्रिएट घटना में डेटा मॉड्यूल के किसी भी गुण या विधियों को कॉल करने का प्रयास करते हैं, तो आपको एक्सेस उल्लंघन अपवाद मिलेगा - क्योंकि डेटा मॉड्यूल अभी तक नहीं बना है।
इस समस्या को हल करने के लिए, आपको डेटा मॉड्यूल के बनाए गए ऑर्डर को मैन्युअल रूप से बदलना होगा - और इसे सेट करना होगा पहला फॉर्म जो एप्लिकेशन द्वारा बनाया गया है (या तो प्रोजेक्ट-प्रॉपर्टीज़ डायलॉग का उपयोग करके या संपादन द्वारा प्रोजेक्ट्स स्रोत फ़ाइल).

चूंकि डेटा मॉड्यूल मुख्य रूप से पहले बनाया गया है, इसलिए आप मेनफोर्म की ऑनक्रीट घटना में डेटा मॉड्यूल से सुरक्षित तरीके से कॉल कर सकते हैं।

instagram story viewer