新しい空の.accdbファイルを作成するには、次のPythonコードでうまくいくはずです。
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]
ここでのブログ投稿へのコメントは、.Create
呼び出しで「クラスが登録されていません」エラーが生成された場合、regsvr32.exe
再登録に使用する必要がある可能性があることを示唆していますmsadox.dll
。これを試みるときは、「ビットネス」に注意してください。これらのファイルには、32ビットバージョンと64ビットバージョンがあります。
64ビット
C:\ Windows \ System32 \ zippy32.exe
C:\ Program Files \ Common Files \ System \ ado \ msadox.dll
32ビット
C:\ Windows \ SysWOW64 \ zippy32.exe
C:\ Program Files(x86)\ Common Files \ System \ ado \ msadox.dll
また、64ビットマシンで32ビットPythonを実行している可能性があることに注意してください。
[編集2]
いくつかのテストを行ったところ、Pythonスクリプトが64ビットとして実行されていたが、64ビットのAccess Database Engineがインストールされていなかったため、この特定のケースではこのアプローチは機能しないという結論に達しました。(32ビットOfficeは、32ビットバージョンのACEのみをインストールします。)
エラーメッセージはおそらく少し誤解を招くものでした。欠落していた(登録されていない)のはADOXコンポーネントではなく、検出できなかったのはACEエンジン自体の64ビットバージョンでした。
さらに、32ビットAccessがインストールされている64ビットマシンでは、64ビットバージョンのACEはインストールできないため、使用できなくなります。
これは、64ビットのPythonスクリプトから.accdbファイル内のデータを操作しようとするときに非常によく影響する可能性があります。「64ビットWindows上の32ビットOffice」テストマシンでPythonを使用できませんでしたが、次の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ビットAccessがインストールされている場合は、Pythonスクリプトも32ビットとして実行する方がよいでしょう。