INS SQL后,MS SQL获取值

时间:2013-12-11 13:59:25

标签: 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(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_prefix和RM_suffix),将它们插入我的表格并将它们返回到我的Excel文件。

如果有一种方法可以在不使用存储过程(例如函数)的情况下执行此操作,那也很棒!

请记住,这是一个多用户环境,因此在Excel中生成值,将它们发送到SQL服务器以进行插入并不能保证100%保证所述数据的唯一性。

感谢大家的宝贵帮助和投入!

彼得

2 个答案:

答案 0 :(得分:0)

你需要这样的东西 -

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

答案 1 :(得分:0)

实际上,问题来自SQL存储过程。我已经添加      SET NOCOUNT ON; 就在之前     INSERT INTO [ExcelRGA] (RM_prefix, RM_suffix, editing, createdBy, editedBy) values (@RM_prefix, @RM_suffix, 1, @user, @user);

它解决了我的问题!我现在可以在VBA中浏览记录集。

感谢大家的帮助和投入!