Aby utworzyć nowy, pusty plik Accdb poniższy kod Python powinno załatwić sprawę:
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.'
[Edytuj 1]
Komentarz Do Wpis na blogu here sugeruje, że jeśli wywołanie .Create
generuje błąd "Class not registered", konieczne może być ponowne użycie regsvr32.exe
do ponownej rejestracji msadox.dll
. Bądź świadomy "bitness" podczas próby to: Są to 32-bitowe i 64-bitowe wersje zarówno tych plików:
64-bit
C: \ Windows \ System32 \ regsvr32.exe
C: \ Program Files \ Common Files \ system \ ado \ msadox.dll
32-bit
C: \ Windows \ SysWOW64 \ regsvr32.exe
C: \ Program Files (x86) \ Pliki wspólne \ System \ ado \ msadox.dll
Należy również pamiętać, że na komputerze 64-bitowym może być uruchomiony 32-bitowy język Python.
[Edycja 2]
Zrobiłem kilka testów i nie doszedł do wniosku, że takie podejście nie działa w tym konkretnym przypadku, ponieważ skrypt Pythona został uruchomiony jako 64-bitowe, ale 64 - Aparat bazy danych Access nie został zainstalowany. (32-bitowy pakiet Office instaluje tylko 32-bitową wersję ACE.)
Komunikat o błędzie był może nieco mylący. Nie było komponentu ADOX, którego brakowało (niezarejestrowane), nie można było znaleźć 64-bitowej wersji samego silnika ACE.
Ponadto na zainstalowane maszyna 64-bit z 32-bitowym Access, wersja 64-bitowa ACE będzie nigdy być dostępne, ponieważ nie może być zainstalowany
To może być bardzo dobrze mają wpływ na próbę manipulowania danymi w pliku accdb z 64-bitowego skryptu Python. Nie miałem Python dostępny na moim „Biura 32-bitowego na 64-bitowy Windows” maszynie testowej, ale kiedy próbowałem następujące 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
...Wyniki były następujące:
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.
Uruchomienie skryptu nie powiodło się w wersji 64-bitowej, ale działało po uruchomieniu jako 32-bitowe.
Zalecenie: Jeśli twoje urządzenie ma zainstalowany 32-bitowy dostęp, prawdopodobnie lepiej będzie, jeśli Twoje skrypty w języku Python będą działać również jako 32-bitowe.
Doskonały, który działał jak czar! Jeszcze jedno pytanie: Skąd czerpię wszystkie informacje z ustawionych dla dbLangGeneral? Pozdrowienia Thomas –
Z poziomu sesji programu Access użyłem 'Debug.Print dbLangGeneral' i skopiowałem ciąg, który został zwrócony. Zobacz temat pomocy CreateDatabase, aby uzyskać szczegółowe informacje na temat innych opcji. – HansUp