#26 | アクションクエリーのトランザクションを考える | |||||||||||||||||||||||||
VBAを使ったデータアクセスにおけるトランザクション処理については、このAccess Laboでもすでに取り上げています(#09参照)。しかし、トランザクション処理は、アクションクエリーにも用意されています。クエリーの「トランザクションの使用」というプロパティがそれです。デフォルトでは"はい"、トランザクションを使用するという設定になっています。つまり、データ処理の安全性を優先した設定になっているわけです。
テストに使うコードは次のようなものです。DoCmd.OpenQuery の行の右に書かれた番号が、テストパターンの各番号を表しています。 Sub TestQryTransaction() DoCmd.SetWarnings False ts_Watch "テスト開始", True 'トランザクションを使用する場合のテスト DoCmd.OpenQuery "更新クエリ_デフォルト"・・・・・・1 ts_Watch "トランザクション使用 更新" DoCmd.OpenQuery "追加クエリ_デフォルト"・・・・・・2 ts_Watch "トランザクション使用 追加" DoCmd.OpenQuery "削除クエリ_デフォルト"・・・・・・3 ts_Watch "トランザクション使用 削除" 'トランザクションを使用しない場合のテスト DoCmd.OpenQuery "更新クエリ_トランなし"・・・・・・4 ts_Watch "トランザクション不使用 更新" DoCmd.OpenQuery "追加クエリ_トランなし"・・・・・・5 ts_Watch "トランザクション不使用 追加" DoCmd.OpenQuery "削除クエリ_トランなし"・・・・・・6 ts_Watch "トランザクション不使用 削除" DoCmd.SetWarnings True End Sub テスト結果は次の通りです。 削除クエリーでは、トランザクションを使わないことによって若干処理時間が短くなっていますが、おおむね、VBAにおけるトランザクション処理と同様、アクションクエリーでも、トランザクションを使うことによってパフォーマンスが向上するということが分かりました。しかし、VBAの場合は、トランザクションを意識してコーディングしなければなりませんが、クエリーの場合にはトランザクションを使うという設定がデフォルトになっていますので、逆に「この設定を変更するとパフォーマンスが落ちる」という言い方もできると思います。つまり、アクションクエリーの「トランザクションの使用」プロパティは特に気にする必要はないといってもいいかもしれません。 ただ、今回の結果で、削除クエリーの場合にはトランザクションを使わない方が処理時間が小さくなっていることを考えると、処理対象とするテーブルのレコード数、キー設定などのテーブル構造、あるいはWHERE条件などによって、トランザクションの効果が変わらないとは言い切れないかもしれません。 |
||||||||||||||||||||||||||
|
Copyright © T'sWare All rights reserved |