【发布时间】: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