MS SQL在插入后获取值
我面临一个问题,需要根据现有数据计算一些数据,然后插入该数据,最后使用VBA将其返回Excel文件 我已成功创建了一个存储过程,该存储过程在插入以下内容后返回一个值表:MS SQL在插入后获取值,sql,sql-server,excel,vba,recordset,Sql,Sql Server,Excel,Vba,Recordset,我面临一个问题,需要根据现有数据计算一些数据,然后插入该数据,最后使用VBA将其返回Excel文件 我已成功创建了一个存储过程,该存储过程在插入以下内容后返回一个值表: [...] INSERT INTO [ExcelRGA] (RM_prefix, RM_suffix, editing, createdBy, editedBy) values (@RM_prefix, @RM_suffix, 1, @user, @user); DECLARE @tab table (RM varchar(2
[...]
INSERT INTO [ExcelRGA] (RM_prefix, RM_suffix, editing, createdBy, editedBy) values (@RM_prefix, @RM_suffix, 1, @user, @user);
DECLARE @tab table (RM varchar(20))
INSERT @tab SELECT (@RM_prefix +'-' + right('00' + @RM_suffix, 3)) as 'RM';
SELECT * FROM @tab
END
这很有效!但是,我无法使用VBA获取它返回的值
Set oRS = New ADODB.Recordset
Set cmd = New ADODB.Command
Dim objRec As Object
cmd.ActiveConnection = oCon
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "dbo.newRM"
cmd.Parameters.Refresh
cmd.Parameters("@user").Value = "john"
Set oRS = cmd.Execute()
但是我试着做一些像
while not oRS.eof
....
wend
获取一条错误消息,说明记录集已关闭,我无法执行我的操作
我所要做的就是保护我计算的信息(RM_前缀和RM_后缀),将它们插入我的表并返回到我的Excel文件中
如果有一种方法不使用存储过程(如函数)就可以做到这一点,那也太好了
请记住,这是一个多用户环境,因此在Excel中生成值并将其发送到SQL server进行插入并不能100%保证所述数据的唯一性
感谢大家宝贵的帮助和投入
彼得你需要这样的东西-
Private Function GetIDENTITY() As Long
oRS.Open "SELECT @@identity AS NewID", oCon
If Not IsNull(oRS.Fields("NewID")) Then
GetIDENTITY = oRS.Fields("NewID"): oRS.Close
Else
MsgBox "Error: Identity value not returned.", vbCritical
End
End If
End Function
实际上,问题来自SQL存储过程。我补充说
设置不计数代码>
就在
插入[ExcelRGA](RM_前缀,RM_后缀,编辑,createdBy,editedBy)值(@RM_前缀,@RM_后缀,1,@user,@user)代码>
它解决了我的问题!我现在可以在VBA中浏览记录集
感谢大家的帮助和投入 在代码中,oRS
是您为记录集指定的名称,但在while
代码中,您指的是rs
。那是个错误吗?对不起,是的。实际上,如果使用临时表而不是表变量,会发生什么?这可能是一个选项,但如何确保在Excel中获得插入的值?从Excel传递的唯一参数是用户名。但是,可能会有两个不同的人使用同一个帐户。添加oRs。在while循环之前先移动oRs。也可以使用oRs。打开“SqlCommandHere”
而不是。执行谢谢!但是我应该把这个放在哪里呢?我试着在cmd.Execute()
之后运行它,但我得到了关键的结果。