2014/07/16

Access 2013 ODBC リンク テーブル と SQL Server - 9

Database.Execute メソッド を実行したとき。
Execute メソッド の Query パラメータは Access SQL で記述。そして、実際には、T-SQLに翻訳されてSQL Server で実行される。ACE は その操作に関与しているから、Database.RecordsAffected プロパティ で影響を受けたレコード数の取得は可能。
Sub test_Database_Execute()
On Error GoTo ErrHnd
    Dim dbs As DAO.Database
    Set dbs = CurrentDb
    
    dbs.Execute _
        "insert into Table_0 (F_Num) values (100);", _
        DAO.dbFailOnError
    Debug.Print dbs.RecordsAffected
    Debug.Print dbs.OpenRecordset("SELECT @@IDENTITY")(0)

    dbs.Execute _
        "update Table_0 set F_Num = 99 where F_Num = 100;", _
        DAO.dbFailOnError
    Debug.Print dbs.RecordsAffected

    dbs.Execute _
        "delete from Table_0 where F_Num = 99;", _
        DAO.dbFailOnError + DAO.dbSeeChanges
    Debug.Print dbs.RecordsAffected

Done:

Exit Sub
ErrHnd:
    If DBEngine.Errors.Count > 0 Then
        Dim e As DAO.Error, msg As String
        For Each e In DBEngine.Errors
            msg = msg & e.Number & ":" & e.Description & vbCrLf
        Next
        Debug.Print msg
    End If

    Resume Done
End Sub

SQLExecDirect: INSERT INTO  "dbo"."Table_0"  ("F_Num") VALUES (?)
SQLExecDirect: SELECT @@IDENTITY
SQLExecDirect: UPDATE "dbo"."Table_0" SET F_Num=99  WHERE ("F_Num" = 100 ) 
SQLExecDirect: DELETE FROM "dbo"."Table_0" WHERE ("F_Num" = 99 ) 
それぞれの メソッド 実行時で、ステートメントは実施される。2行目 オートナンバーである時など主キーを取得している。
exec sp_executesql N'INSERT INTO  "dbo"."Table_0"  ("F_Num") VALUES (@P1)',N'@P1 int',100
go
SELECT @@IDENTITY
go
UPDATE "dbo"."Table_0" SET F_Num=99  WHERE ("F_Num" = 100 ) 
go
DELETE FROM "dbo"."Table_0" WHERE ("F_Num" = 99 ) 
go
SQL Server上ではこのような感じで動作する。

0 件のコメント: