2

VBAのADODB接続クラスを使用して、VBAを介してSQLServerへの更新クエリを実行しています。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

助けていただければ幸いです。ありがとうリチャード

4

1 に答える 1

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

UPDATEステートメントの影響を受ける行数を返します

参照:access-SQLパススルークエリ(SPの作成)エラー

その後、次のことができます。

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

1行でパススルークエリを作成することもできます。

UpdateTables

どちらが返される可能性があります:

    Table2  Table3  Table4
    0       2       0
于 2013-01-15T20:02:33.877 に答える