5

Pythonスクリプト内からAccessデータベース(* .accdb)を作成したいと思います。win32comとDispatchを使用して、アプリケーションを呼び出すことができます。しかし、新しいデータベースを作成する方法については何も見つかりません。

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

その時点で、データベースにデータを入れる必要はなく、pyodbcを使用してこれを行います。空のデータベースを作成するだけです。

誰かがこれを行う方法の例を持っていますか?

乾杯トーマス

4

3 に答える 3

4

Accessアプリケーションオブジェクトがあります。そのDBEngine.CreateDatabaseメソッドを使用して、dbファイルを作成します。

このサンプルはPython2.7から機能し、MDB形式のデータベースファイルを作成しました。ACCDBを作成するには、に128(dbVersion120)を使用しdbVersionます。

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
于 2013-03-27T14:41:15.493 に答える
1

新しい空の.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はインストールできないため、使用できなくなります

32ビットOfficeを備えた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ビットとして実行する方がよいでしょう。

于 2013-03-27T12:02:48.187 に答える
0
import win32com.client
ConFileName = r'c:\mydb\myaccess.mdb'
try:
    Catalog = win32com.client.Dispatch('ADOX.Catalog')
    Catalog.Create('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + ConFileName + ';')
    Catalog = None
except:
    Exception as e:
        print("Database generation failed, Error="+str(e))
print("NewAccessDB.mdb created successfully")

次に、データベースにアクセスするために接続できます。

ConFileName=(r'c:\mydb\myaccess.mdb')
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + ConFileName + ';')
cursor = conn.cursor()

アクセステーブルに挿入するには:

ConFileName=(r'c:\mydb\myaccess.mdb')
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' +ConFileName+ ';')
cursor = conn.cursor()
for ta in TableArray:
    Sql_insert_query = "INSERT INTO Table1(ID, Value1,Value2,Value3,Value4,Value5,Value6) " \
                         "VALUES ('{a}','{b}','{c}','{d}','{e}','{f}','{g}')".format(a=str(ta[0]),b=str(ta[1]),c=str(ta[2]),d=str(ta[3]),e=str(ta[4]),f=str(ta[5]),g=str(ta[6]))
    cursor.execute(Sql_insert_query)
    conn.commit()
cursor.close()

詳細については、次のリンクをたどってください。

https://elvand.com/python-and-ms-access/

于 2021-03-17T17:31:55.970 に答える