gpt4 book ai didi

excel - 在 ADODB 记录集中使用 "SELECT SCOPE_IDENTITY()"

转载 作者:行者123 更新时间:2023-12-04 13:45:29 25 4
gpt4 key购买 nike

在 Excel 中使用 VBA 脚本,我试图在表中插入一个新行,然后取回该行的标识值。如果我运行:

INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()

在 Management Studio 中,插入了该行,并按预期为我提供了返回的标识值。但是,当我通过 VBA 中的 ADODB 记录集运行完全相同的查询时,我遇到了麻烦。该行确实已插入,但我无法访问标识值。记录集列出了 0 个字段,实际上也已关闭。我尝试过使用分号和不使用分号,我还尝试将查询作为单个事务运行。同样的交易,没有骰子。知道发生了什么吗?

这是我的VBA:

Dim rs As ADODB.Recordset
Dim cn As Connection
Dim SQLStr As String
Dim serverName As String
Dim databaseName As String

serverName = "MSSQLServer"
databaseName = "QA"
cxnStr = "Driver={SQL Server};Server=" & serverName & ";Database=" & databaseName & ";"

SQLStr = "INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP); SELECT SCOPE_IDENTITY()"
Set cn = New ADODB.Connection
cn.Open cxnStr
Set rs = New ADODB.Recordset
rs.Open SQLStr, cn, adOpenKeyset, adLockOptimistic
MsgBox (rs.Fields(0).Value)

并且消息框无法显示,因为 rs.Fields(0).Value返回 NULL。我在 rs 中添加了一个 watch ,并且就像我说的那样,在查询后显示 0 个字段并且似乎也已关闭(状态 = 0)。

最佳答案

当您使用 ADODB 运行一批命令时,我相信它会单独运行每个命令。要强制运行下一个命令,您必须使用以下命令:

Set rs = rs.NextRecordset()

将例程的结尾更改为以下内容应该可以解决问题:
Set rs = New ADODB.Recordset
rs.Open SQLStr, cn, adOpenKeyset, adLockOptimistic
Set rs = rs.NextRecordset
MsgBox (rs.Fields(0).Value)

关于excel - 在 ADODB 记录集中使用 "SELECT SCOPE_IDENTITY()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1201089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com