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 件のコメント:
コメントを投稿