2017-12-22 29 views
0

Access VBAでは、データベースの挿入/更新にパラメータを使用してADODBコマンドを使用する必要がありました。CurrentProject.ConnectionをADODB.Connectionに正しく使用しますか?

挿入するデータベースは常に最新のものなので、CurrentProject.Connectionを使用します。

conn.Openを使用せずにすべて動作すると、オープンしようとするとエラー3705が返されます。オブジェクトが開いているときは操作できません。

接続制限になる重要なものがありませんか?誰かがより良い方法を提案できますか?

Dim sql As String 
sql = "INSERT INTO " 
sql = sql + "[table]" 
sql = sql + "(field1,field2)" 
sql = sql + "VALUES (@field1,@field2)" 

Dim conn As ADODB.Connection 
Set conn = CurrentProject.Connection 
Dim cmd As ADODB.Command 
Set cmd = New ADODB.Command 

With cmd 
.ActiveConnection = conn 
.CommandType = adCmdText 
.CommandText = sql 
.Parameters.Append .CreateParameter("@field1", adVarChar, adParamInput, 255, x) 
.Parameters.Append .CreateParameter("@field2", adVarChar, adParamInput, 255, y) 
.Execute 
End With 
+0

これを開くことなく接続を使用できます。すでに開いています。あなたは何をしようとしているのですか?あなたのコードは明示的に接続を開くことなく動作しますか? – DataWriter

+0

*すべてはconn.Open *を使わずに動作しますが、ここでは 'conn.Open'を使用しません。投稿されたコードはここで間違っていますか? – Parfait

+0

申し訳ありませんが、私は明確ではありませんでした。すべてがテストの際に完全に機能します。私は生産中に接続を最大限にするリスクがあるかどうか分かりません。同じ接続を使用している複数のユーザーからのエラーの危険性がありますか? – user6788933

答えて

1

DAOを使用していますか?

Dim q  As DAO.QueryDef 
Dim strSQL As String 

strSQL = "INSERT INTO table1 " & _ 
     "(City, Province) " & _ 
     "Values([pCity], [pProvince])" 

Set q = CurrentDb.CreateQueryDef("", strSQL) 
q.Parameters("pCity") = "Edmonton" 
q.Parameters("pProvince") = "Alberta" 
q.Execute