Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用;选择范围“标识()”;在ADODB记录集中_Excel_Sql Server 2008_Adodb_Recordset_Vba - Fatal编程技术网

Excel 使用;选择范围“标识()”;在ADODB记录集中

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个字段,实际上也已关闭。我尝试过使用分号和不使用分号,也尝试过将查询作为单个事务运行。同

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

插入数据表(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方法