एक्सेल डेटा स्रोतों के लिए कनेक्शन स्ट्रिंग पैरामीटर
पिछले लेख में, मैंने चर्चा की थी कि हम एक्सेल और टेक्स्ट फाइलों के साथ कैसे व्यवहार कर सकते हैं जैसे कि वे डीएओ का उपयोग करने वाले डेटाबेस थे, और हम उन्हें बिना लिंक किए कैसे खोल सकते हैं। चूंकि वे ओडीबीसी ड्राइवरों का उपयोग नहीं करते हैं, इसलिए उनकी कनेक्शन स्ट्रिंग को ओडीबीसी कनेक्शन स्ट्रिंग के लिए देखने के आदी होने से काफी अलग स्वरूपित किया जाएगा। एक्सेल कनेक्शन स्ट्रिंग पैरामीटर पर दस्तावेज़ीकरण की कमी है। कुछ कमियों को पाटने और मापदंडों के प्रभाव पर चर्चा करने का यह सबसे अच्छा प्रयास है।
एक्सेल कनेक्शन स्ट्रिंग पैरामीटर
भले ही हमारे पास 3 अलग-अलग डेटा स्रोत "प्रकार" हैं:
Excel 8.0:97-2003 xls फ़ाइलेंExcel 12.0:xlsb फ़ाइलेंExcel 12.0 Xml:xlsx फ़ाइलें
वे सभी एक ही पैरामीटर का उपयोग करते हैं।
यहां मापदंडों की सूची दी गई है:
HDR पैरामीटर:हैडर पंक्ति
YES :पहली पंक्ति हेडर है और "टेबल"/"रिकॉर्डसेट" के लिए कॉलम नाम बन जाना चाहिए
NO :पहली पंक्ति को अलग तरीके से नहीं माना जाता है और यह केवल एक डेटा है। सभी कॉलम नामों को "एफएन" नाम दिया जाएगा जहां "एन" 1 से शुरू होने वाली संख्या है
IMEX पैरामीटर:आयात/निर्यात व्यवहार
यह नियंत्रित करता है कि सामग्री के आधार पर कॉलम डेटा प्रकारों को कैसे परिभाषित किया जाना चाहिए:
1 :यदि कॉलम में अलग-अलग डेटा प्रकार हैं, तो इसे एक स्ट्रिंग के रूप में मानें। अन्यथा, कॉलम का मिलान सर्वश्रेष्ठ डेटा प्रकार से करें।
2 :हमेशा नमूने के आधार पर कॉलम का मिलान एक निश्चित डेटा प्रकार से करें। यह पढ़ने में त्रुटि का कारण हो सकता है जब हम एक ऐसी पंक्ति पढ़ते हैं जिसमें डेटा होता है जो अपेक्षित डेटा प्रकार से मेल नहीं खाता है।
ACCDB पैरामीटर:इंगित करता है कि एक्सेस ACCDB फ़ाइल स्वरूप का उपयोग कर रहा है?
डिफ़ॉल्ट रूप से, यह हमेशा ACCDB=YES को accdb फ़ाइल स्वरूप में सेट किया जाता है। हालाँकि, इसे छोड़ना या इसे NO पर सेट करना कुछ भी नहीं लगता है। यह थोड़ा रहस्य है। अगर कोई इस पैरामीटर के प्रभाव को साझा कर सकता है, तो टिप्पणी में पोस्ट करें और मैं ब्लॉग को अपडेट कर दूंगा।
डेटाबेस:एक्सेल वर्कबुक का पथ
पैरामीटर में कार्यपुस्तिका के नाम सहित पूरी तरह से योग्य पथ होना चाहिए।
न्यूनतम कार्यशील कनेक्शन स्ट्रिंग
ध्यान दें कि डेटा प्रकार स्रोत कीवर्ड के अतिरिक्त केवल DATABASE ही अनिवार्य पैरामीटर है। इसलिए एक न्यूनतम कार्यशील कनेक्शन स्ट्रिंग हो सकती है:
Excel 8.0;DATABASE=C:\Links\Products.xls
कनेक्शन स्ट्रिंग में शीट या श्रेणी निर्दिष्ट करना
पिछले नमूने में, आपने देखा था कि एक शीट “DAO.TableDef . का प्रतिनिधित्व करती है ". हालांकि, वर्कशीट ही एकमात्र ऐसी चीज नहीं है जो "Tabledef . हो सकती है ". यदि एक्सेल स्प्रेडशीट में एक नामित श्रेणी है, तो नामित श्रेणी को "Tabledef . के रूप में रिपोर्ट किया जाएगा " भी। इसके अतिरिक्त, हम सेल पते का उपयोग करके शीट में एक मनमाना ब्लॉक "क्वेरी" कर सकते हैं। उदाहरण के लिए:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
Set rs = db.OpenRecordsset("Sheet$1A1:A3")
Debug.Print rs.Name, rs.Fields.Count
यह नोट करना महत्वपूर्ण है कि सेल के पते शीट की उपयोग की गई सीमा से अधिक नहीं हो सकते। उदाहरण के लिए, Products.xlsx केवल वास्तव में A1:B3 में सामग्री है, इसका मतलब है कि यदि आप शीट1$A1:D5 का उपयोग करके एक रिकॉर्डसेट खोलते हैं, तो भी आपको फ़ील्ड गणना के लिए केवल 2 और रिकॉर्ड गणना के लिए 3 मिलते हैं। अतिरिक्त खाली कॉलम/पंक्तियों को केवल अनदेखा कर दिया जाता है। दूसरी तरफ, अगर आपने A1:B3 . के बाहर कहीं किसी सेल को गंदा किया है , शीट का UsedRange अब उतना ही बड़ा होगा और क्वेरी करने में खाली कॉलम और पंक्तियाँ शामिल होंगी।
इसलिए एक्सेल "डेटाबेस" पर एक क्वेरी में उपयोग करने के लिए वे मान्य नाम हैं:
Sheet1$- वर्कशीट की पूरी इस्तेमाल की गई रेंज।Sheet1$A1:B4- केवल 2 कॉलम और 3 पंक्तियाँ (हेडर की गिनती नहीं), बशर्ते कि सामग्री भरी हुई हो। अन्यथा कॉलम या पंक्तियाँ अनुरोध से कम हो सकती हैं।ProductsRange- उस नाम के साथ नामित श्रेणी।
मुझे नामित श्रेणियों का उपयोग करना बहुत अच्छा लगता है जहां व्यावहारिक यह सुनिश्चित करता है कि आप अपने कोड में पतों को हार्ड-कोडिंग नहीं कर रहे हैं, खासकर यदि उपयोगकर्ता द्वारा नए कॉलम या पंक्तियों को सम्मिलित करने के कारण रेंज इधर-उधर हो जाती है, लेकिन नामित श्रेणी की सामग्री में परिवर्तन नहीं होता है . हालांकि यह हमेशा व्यावहारिक नहीं होता है, खासकर यदि आप किसी तृतीय पक्ष से स्प्रैडशीट प्राप्त कर रहे हैं और इसलिए इसकी सामग्री या प्रारूपों पर आपका कोई नियंत्रण नहीं है। इस मामले में, SQL क्वेरी लिखना भी काम कर सकता है।
Excel डेटा स्रोत की क्वेरी करना
मान लीजिए कि हम प्रारूप को नियंत्रित नहीं कर सकते हैं और हम पूर्ण पते पर भरोसा नहीं करना चाहते हैं, हालांकि हमें विश्वास है कि कुछ कॉलम और पंक्तियां वास्तव में मौजूद होंगी। उस स्थिति में, पूछताछ करना सबसे अच्छी बात है। यहां एक उदाहरण दिया गया है जो केवल एक पंक्ति का चयन करता है:
Dim db As DAO.Database
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT d.[Count] FROM [Sheet1$] AS d WHERE d.[Products] = 'Bananas';")
Debug.Print rs.Fields(0).Value उम्मीद है कि आप देख सकते हैं कि प्रत्येक पंक्तियों पर पुनरावृत्ति करने से यह पता लगाना बहुत आसान है कि किसके पास "केले" हैं और फिर गिनती प्राप्त करने के लिए कॉलम को दाईं ओर पढ़ना है। इस मामले में, क्वेरी करना एक्सेल को स्वचालित करने से पीछे हट जाता है।
निष्कर्ष
आपने देखा है कि डीएओ हमारे लिए एक्सेल डेटा स्रोत के साथ काम करना बहुत आसान बनाता है और यह दिखावा करता है कि यह एक रिलेशनल डेटा स्रोत था और वीबीए कोड का गुच्छा लिखने के बजाय हमारी पसंदीदा क्वेरीिंग भाषा और परिचित डीएओ ऑब्जेक्ट्स का उपयोग करता है जो एक्सेल को खोजने के लिए स्वचालित करता है। डेटा हम चाहते हैं। कनेक्शन स्ट्रिंग पैरामीटर काफी सीधे हैं और जब तक आपके पास पथ है, आप एक्सेल स्प्रेडशीट को जोड़ने या खोलने के लिए अच्छे हैं।
अगले लेख में हम टेक्स्ट फ़ाइल कनेक्शन पैरामीटर देखेंगे।