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 ) goSQL Server上ではこのような感じで動作する。
0 件のコメント:
コメントを投稿