【问题标题】:Correct use of CurrentProject.Connection for ADODB.Connection?ADODB.Connection 正确使用 CurrentProject.Connection?
【发布时间】:2017-12-23 08:00:32
【问题描述】:

在 Access VBA 中,我需要使用参数进行数据库插入/更新,因此我开始使用 ADODB 命令。

要插入的数据库始终是当前数据库,所以我使用 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

【问题讨论】:

  • 您可以直接使用连接而不打开它——它已经打开了。你想做什么?您的代码是否可以在不显式打开连接的情况下工作?
  • 在不使用 conn.Open 的情况下一切正常 ...但您不要在此处使用 conn.Open。这里发布的代码会出错吗?
  • 对不起,我不清楚。测试时一切正常。我只是不知道在生产中是否存在最大化连接的风险?还是多个用户使用同一连接出错的风险?

标签: ms-access vba


【解决方案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

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2021-05-18
    • 2018-09-09
    • 1970-01-01
    • 2010-12-18
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多