2016-11-07 8 views
1

私は、Win32com.clientでpythonを使ってMS Accessテーブルに行を書き込み/挿入しようとしています。私はどのようにAccessテーブルhereに接続してクエリするのかの例を見出しました。基本的に、少し私自身の使用のために改変彼らのコードは次のとおりです。MSアクセステーブルに書き込む、Pythonのwin32com

import win32com.client 

connection = win32com.client.Dispatch(r'ADODB.Connection') 
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=c:\\testdb.mdb;' 
connection.Open(DSN) 
recordset = win32com.client.Dispatch(r'ADODB.Recordset') 
recordset.Open('SELECT * FROM Table1', connection, 1, 3) 
fields_dict = {} 
for x in range(recordset.Fields.Count): 
    fields_dict[x] = recordset.Fields.Item(x).Name 
    print fields_dict[x], recordset.Fields.Item(x).Value 

だからこれは、AccessのテーブルにSELECT文を実行する方法を私に伝えます。私はテーブルに行とデータを書くことができるようにしたいと思います。 MS Office製品にwin32comを使用する場合、私はMSDN pagesに潜入し、PythonコードのVBAコードを解釈しようとしますが、これは私に少し手錠がかけられています。インターネットで長時間の検索をしても例が見つからないというカップルは、これが可能かどうかをもう一度推測しました。うまくいけば、そこに誰かが前にこれと遊んで、提案があります。その後、

+1

あなたは 'ADODB.Command'オブジェクトのパラメータを指定すると、やや冗長になりますが、あなたは、あまりにも' INSERT'文を実行することができますwin32comと 'SELECT'ステートメントを実行することができる場合。より一般的なアプローチは、Access ODBCドライバでpyodbc(またはおそらくpypyodbc)を使用して、そのような簡単なCRUD操作を実行し、Access DAOを使用してデータベースの低レベル操作を実行するためにwin32comを保存することです扱うことができません。 –

+0

おかげでゴード。もし私ができるなら、私はwin32comに固執したいと思います。私は私の検索を通して私の旅行のpyodbcを見ました。これがうまくいかなければ、次に行くつもりです。 – Mike

+1

@ GordThompsonさんのコメントにピギーバックするために、MS AccessはバックエンドデータベースとGUI .exeアプリケーションの両方です。フォームやレポート/マクロ/モジュールを調整する必要がある場合は、Accessアプリのメソッドを実行してください(例:odbc)。他のRDMSと同じように、SQLite、SQL Server、 'DoCmd。*'、または他のアプリケーション層のように、COMインタフェースを使用します。また、VBAはAccess.exeの外部コンポーネントであり、COM接続はPythonのように接続することを忘れないでください! – Parfait

答えて

2

私はpyodbc(またはpypyodbc)を使用して、質問に私のコメントで述べたようにし、Access ODBCドライバCRUD操作を行うための、より一般的な方法ですが、あなた本当にがwin32comとOLEDBを使用したい場合、あなたは可能性がありこのようなUPDATEの操作を行います。

import win32com.client 

# ADODB constants 
adVarWChar = 202 
adInteger = 3 
adParamInput = 1 

connection = win32com.client.Dispatch(r'ADODB.Connection') 
DSN = (
    r'PROVIDER=Microsoft.Jet.OLEDB.4.0;' 
    r'DATA SOURCE=C:\Users\Public\mdbTest.mdb;' 
    ) 
connection.Open(DSN) 
cmd = win32com.client.Dispatch(r'ADODB.Command') 
cmd.ActiveConnection = connection 
cmd.CommandText = "UPDATE Donors SET LastName = ? WHERE ID = ?" 
cmd.Parameters.Append(cmd.CreateParameter("?", adVarWChar, adParamInput, 255)) 
cmd.Parameters.Append(cmd.CreateParameter("?", adInteger, adParamInput)) 
cmd.Parameters(0).Value = "Thompson" 
cmd.Parameters(1).Value = 10 
cmd.Execute() 
connection.Close() 
+0

おかげでゴード。私は自分の使用のためにいくつかの変更を加え、あなたのスクリプトが私のために働くようにしました。私もpyodbcで少し近づいています。あなたは良い助けをしてきました。乾杯。 – Mike

関連する問題