【问题标题】:ADODB Command With Insert and Select带有插入和选择的 ADODB 命令
【发布时间】:2013-11-14 02:47:55
【问题描述】:

我正在尝试在 VBA 中使用 ADODB.Command 发送命令。我知道连接和命令正常工作,因为它们在代码中的多个地方使用。但是,我无法让双重插入/选择工作。我不断得到一个计数为 0 的字段的记录集。我更熟悉使用 C# SqlCommand 对象,它允许这种堆叠命令。有没有办法在 VBA 中使用 ADODB 做到这一点?代码如下:

注意:reader2 是ADODB.Recordset。使用 TSQL 连接到 Microsoft SQL Server

        comm2.CommandText = "INSERT INTO tblTest (F1,F2,F3,F4,F5) VALUES(?,?,'Running',?,0); SELECT SCOPE_IDENTITY()"
        comm2.Parameters.Append comm2.CreateParameter("@f1", adVarChar, adParamInput, Len(f1) + 1, f1)
        comm2.Parameters.Append comm2.CreateParameter("@f2", adVarChar, adParamInput, 1, f2)
        comm2.Parameters.Append comm2.CreateParameter("@f3", adDate, adParamInput, 0, Now)
        Set reader2 = comm2.Execute
        scopeId = reader2.Fields(0)
        reader2.Close
        comm2.Parameters.Delete (0)
        comm2.Parameters.Delete (0)
        comm2.Parameters.Delete (0)

【问题讨论】:

  • @mehow reader2 是一个 ADODB.recordset。我已经在上面添加了。
  • 如果您正在访问 Access 数据库,这将不起作用,因为 Access 不支持批处理命令。我相当肯定它也不支持SCOPE_IDENTITY()。您需要使用@@IDENTITY。无论哪种方式,在执行命令之前添加Comm2.CommandType = adCmdText。然后在同一连接上分别运行这两个命令。插入后更改 CommandText 并运行身份选择代码。
  • @Fred 我正在使用 TSQL 而不是 Access 连接到 Microsoft SQL Server。我试图拆分这两个命令,但是“SELECT SCOPE_IDENTITY()”在与插入分开运行时返回 NULL。

标签: sql sql-server vba adodb


【解决方案1】:

我使用

解决了这个问题
Set reader2 = reader2.NextRecordset

命令执行后。批处理命令创建一个记录集列表,其中第一个是属于插入的记录集,而不是选择。

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多