我正在使用VBA的ADODB连接类通过VBA运行SQL Server的更新查询。在SQL Server中,查询返回受影响的行,可以通过ADODB命令类在VBA中访问这些行。
但是我不知道如何返回多个记录受影响语句的数组。
我正在使用示例代码:
Dim ADODBconn As ADODB.Connection
Dim rsRead As New ADODB.Recordset
Dim Rslt_Count As Long
'Set Up Connection and begin SQL Transaction
Set ADODBconn = CurrentProject.AccessConnection
ADODBconn.BeginTrans
'Build Update SQL
SQLLine = "******update query that runs on multiple tables here********"
'Execute SQL
ADODBconn.Execute SQLLine, Rslt_Count, dbFailOnError
MsgBox Rslt_Count
ADODBconn.CommitTrans
ADODBconn.Close
任何帮助表示赞赏。 谢谢 理查德
答案 0 :(得分:1)
我们假设您有一个存储过程:
CREATE PROCEDURE UpdateTables
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @RowCount2 INTEGER
DECLARE @RowCount3 INTEGER
DECLARE @RowCount4 INTEGER
UPDATE Table2 Set atext = 'a' WHERE atext='b'
SELECT @RowCount2 = @@ROWCOUNT
UPDATE Table3 Set atext = 'a' WHERE atext='b'
SELECT @RowCount3 = @@ROWCOUNT
UPDATE Table4 Set atext = 'a' WHERE atext='b'
SELECT @RowCount4 = @@ROWCOUNT
SELECT @RowCount2 AS Table2, @RowCount3 AS Table3, @RowCount4 AS Table4
END
根据Return number of rows affected by UPDATE statements
另请参阅:access-SQL pass-through query (creating SP) error
然后你可以:
Dim dbconn As ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim param As New ADODB.Parameter
Set dbconn = New ADODB.Connection
dbconn.ConnectionString = ServerConLocal
dbconn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = dbconn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "updatetables"
rs.CursorType = adOpenStatic
rs.CursorLocation = adUseClient
rs.LockType = adLockOptimistic
rs.Open cmd
''Records affected
For Each fld In rs.Fields
Debug.Print fld.Name & " : " & fld
Next
End Sub
您还可以使用单行创建传递查询:
UpdateTables
可能会返回:
Table2 Table3 Table4
0 2 0