2013-03-27 9 views
5

का उपयोग कर एक्सेस डेटाबेस बनाएं I Python स्क्रिप्ट के भीतर से एक एक्सेस डेटाबेस (* .accdb) बनाना चाहते हैं। Win32com और डिस्पैच का उपयोग करके मैं एप्लिकेशन को कॉल कर सकता हूं। हालांकि, मुझे कोई नया डेटाबेस बनाने के तरीके पर कुछ भी नहीं मिला।पायथन Win32com

access = win32com.client.Dispatch('Access.Application') 

उस बिंदु पर मैं डेटाबेस में डेटा डाल करने के लिए कोई जरूरत नहीं है और मैं इस pyodbc का उपयोग कर करना होगा - मैं बस एक खाली डेटाबेस बनाने की जरूरत है।

क्या किसी के पास यह उदाहरण है कि यह कैसे करें?

चीयर्स थॉमस

उत्तर

4

आपके पास एक एक्सेस एप्लिकेशन ऑब्जेक्ट है। अपनी डीबी फाइल बनाने के लिए DBEngine.CreateDatabase विधि का उपयोग करें।

यह नमूना पाइथन 2.7 से एमडीबी प्रारूप डेटाबेस फ़ाइल बनाने के लिए काम करता है। एसीसीडीबी बनाने के लिए, dbVersion के लिए 128 (डीबीवीर्सन 120) का उपयोग करें।

import win32com.client 
oAccess = win32com.client.Dispatch('Access.Application') 
DbFile = r'C:\Users\hans\Documents\NewDb.mdb' 
dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0' 
# dbVersion40 64 
dbVersion = 64 
oAccess.DBEngine.CreateDatabase(DbFile, dbLangGeneral, dbVersion) 
oAccess.Quit() 
del oAccess 
+0

उत्कृष्ट, यह एक आकर्षण की तरह काम किया! बस एक और सवाल: मैं dbLangGeneral के लिए सेट की गई सभी जानकारी कहां से प्राप्त करूं? चीयर्स थॉमस –

+0

किसी एक्सेस सत्र के भीतर से, मैंने 'Debug.Print dbLangGeneral' का उपयोग किया और लौटाई गई स्ट्रिंग की प्रतिलिपि बनाई। अन्य विकल्पों के विवरण के लिए CreateDatabase सहायता विषय देखें। – HansUp

1

एक नया, रिक्त .accdb फ़ाइल बनाने के लिए, निम्न पायथन कोड चाल करना चाहिए:

import win32com.client 
f = 'C:\\Users\\Gord\\Desktop\\pyTest.accdb' 
c = win32com.client.Dispatch('ADOX.Catalog') 
c.Create('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + f + ';') 
c = None 
print '"' + f + '" created.' 

[संपादित करें 1]

एक के लिए एक टिप्पणी ब्लॉग पोस्टिंग here बताता है कि यदि .Create कॉल "क्लास पंजीकृत नहीं है" त्रुटि उत्पन्न करता है तो आपको को फिर से पंजीकृत करने के लिए regsvr32.exe का उपयोग करने की आवश्यकता हो सकती है। "Bitness" से सावधान रहें जब आप इस प्रयास: के 32-बिट और 64-बिट संस्करण उन फ़ाइलों के दोनों हैं:

64-बिट
C: \ Windows \ System32 \ regsvr32.exe
C: \ Program Files \ Common Files \ System \ हलचल \ msadox.dll

32-बिट
C: \ Windows \ SysWOW64 \ regsvr32.exe
C: \ Program Files (x86) \ सामान्य फ़ाइलें \ System \ ado \ msadox.dll

इसके अलावा, ध्यान रखें कि आप 64-बिट मशीन पर 32-बिट पायथन चला सकते हैं।

[संपादित करें 2]

मैं कुछ परीक्षण किया है और निष्कर्ष है कि इस दृष्टिकोण इस विशेष मामले में काम नहीं किया क्योंकि अजगर स्क्रिप्ट 64-बिट के रूप में चल रहा था पर पहुँच गए हैं, लेकिन 64 -बिट एक्सेस डेटाबेस इंजन स्थापित नहीं किया गया था। (32-बिट ऑफिस केवल एसीई के 32-बिट संस्करण को स्थापित करता है।)

त्रुटि संदेश शायद थोड़ा भ्रामक था। यह एडीओएक्स घटक नहीं था जो गायब था (पंजीकृत नहीं), यह एसीई इंजन का 64-बिट संस्करण था जो पाया नहीं जा सका।

इसके अलावा, एक 64-बिट मशीन 32-बिट प्रवेश के साथ स्थापित पर, ऐस के 64-बिट संस्करण कभी नहीं उपलब्ध हो जाएगा, क्योंकि यह

no 64-bit ACE with 32-bit Office

यह कर सकता है बहुत अच्छी तरह से स्थापित नहीं किया जा सकता जब आप 64-बिट पायथन स्क्रिप्ट से .accdb फ़ाइल में डेटा को हेरफेर करने का प्रयास करते हैं तो प्रभाव पड़ता है। मैं अजगर अपने परीक्षण मशीन "64-बिट Windows पर 32-बिट कार्यालय" पर उपलब्ध नहीं था, लेकिन मैं निम्नलिखित VBScript ...

Option Explicit 
Dim con, rst 
Set con = CreateObject("ADODB.Connection") 
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\Gord\Desktop\adoTest.accdb;" 
Set rst = CreateObject("ADODB.Recordset") 
rst.Open "SELECT Field1 FROM Table1", con 
Wscript.Echo rst(0).Value 
rst.Close 
Set rst = Nothing 
con.Close 
Set con = Nothing 

की कोशिश की जब ...परिणाम इस प्रकार थे:

C:\__tmp>C:\Windows\System32\cscript.exe /nologo dataAccessTest.vbs 
C:\__tmp\dataAccessTest.vbs(4, 1) ADODB.Connection: Provider cannot be found. 
It may not be properly installed. 

C:\__tmp>C:\Windows\SysWOW64\cscript.exe /nologo dataAccessTest.vbs 
This is Table1 data in Access. 

64-बिट के रूप में चलाने पर स्क्रिप्ट विफल रही, लेकिन 32-बिट के रूप में चलने पर यह काम करता था।

अनुशंसा: यदि आपकी मशीन में 32-बिट एक्सेस स्थापित है तो आप शायद अपनी पाइथन स्क्रिप्ट को 32-बिट के रूप में चलाने से बेहतर होंगे।

+0

हाय गॉर्ड, तेज़ उत्तर के लिए धन्यवाद! दुर्भाग्य से यह अभी तक चाल नहीं करता है। मुझे निम्न त्रुटि मिल रही है: ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "सी: \ THOB \ वर्कस्पेस \ टूलबॉक्स \ src \ whales.py", लाइन 102, एक्सेस में। क्रिएट ('प्रदाता = माइक्रोसॉफ्ट.एसीई.ओएलडीबी.12.0; डेटा स्रोत = '+ एफपीडीबी +'; ') फ़ाइल "", लाइन 2, फ़ाइल में फ़ाइल "सी: \ Python27 \ ArcGISx6410.1 \ lib \ साइट -packages \ win32com \ client \ dynamic.py ", लाइन 282, _ApplyTypes_ परिणाम = self._oleobj_.InvokeTypes (* (dispid, LCID, wFlags, retType, argTypes) + args) –

+0

pywintypes.com_error: (-2147352567, 'अपवाद हुआ।', (0, कोई नहीं, आप 'पंजीकृत नहीं हैं', कोई नहीं, 0, -2147221164), कोई नहीं) –

+0

@ थॉमस बेकर मैंने अपना जवाब अपडेट कर दिया है। –

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