Excel 使用;选择范围“标识()”;在ADODB记录集中
使用Excel中的VBA脚本,我试图在表中插入新行,然后获取该行的标识值。如果我跑步:Excel 使用;选择范围“标识()”;在ADODB记录集中,excel,sql-server-2008,adodb,recordset,vba,Excel,Sql Server 2008,Adodb,Recordset,Vba,使用Excel中的VBA脚本,我试图在表中插入新行,然后获取该行的标识值。如果我跑步: 插入数据表(databaseUserID,currentTimestamp) 值(1,当前时间戳); 选择范围_标识() 在ManagementStudio中,将插入该行,并按预期提供返回的标识值。然而,当我在VBA中通过ADODB记录集运行完全相同的查询时,我遇到了麻烦。确实插入了行,但我无法访问标识值。记录集列出了0个字段,实际上也已关闭。我尝试过使用分号和不使用分号,也尝试过将查询作为单个事务运行。同
插入数据表(databaseUserID,currentTimestamp)
值(1,当前时间戳);
选择范围_标识()
在ManagementStudio中,将插入该行,并按预期提供返回的标识值。然而,当我在VBA中通过ADODB记录集运行完全相同的查询时,我遇到了麻烦。确实插入了行,但我无法访问标识值。记录集列出了0个字段,实际上也已关闭。我尝试过使用分号和不使用分号,也尝试过将查询作为单个事务运行。同样的交易,没有骰子。知道发生了什么吗
以下是我的VBA:
将rs作为ADODB.Recordset进行调整
Dim cn As连接
作为字符串的Dim SQLStr
将服务器名称设置为字符串
将数据库名称设置为字符串
serverName=“MSSQLServer”
databaseName=“QA”
cxnStr=“Driver={SQL Server};Server=“&serverName&”Database=“&databaseName&;””
SQLStr=“插入数据表(databaseUserID,currentTimestamp)
值(1,当前\u时间戳);选择范围\u标识()
Set cn=New ADODB.Connection
cn.opencxnstr
Set rs=New ADODB.Recordset
rs.开放式SQLStr、cn、adOpenKeyset、ADLOCK
MsgBox(rs.Fields(0).Value)
消息框无法显示,因为
rs.Fields(0).Value
返回NULL。我在rs中添加了一个手表,如我所说,在查询后显示0个字段,并且似乎已关闭(state=0)。查看当删除adOpenKeySet和AdLockOptimization值时会发生什么情况,将它们保留为默认值。在rs中。打开并尝试此操作
rs.Open SQLStr,cn,adCmdText
当您使用ADODB运行一批命令时,我相信它会分别运行每一个命令。要强制运行下一个命令,必须使用以下命令:
Set rs = rs.NextRecordset()
Set rs = rs.NextRecordset
将例行程序的结尾更改为以下应该可以做到:
Set rs = New ADODB.Recordset
rs.Open SQLStr, cn, adOpenKeyset, adLockOptimistic
Set rs = rs.NextRecordset
MsgBox (rs.Fields(0).Value)
您正在执行两个语句,因此将返回两个结果。recordset对象一次只能保存一个结果-要获得另一个结果,需要使用NextRecordset方法