#03 レコード更新時の OpenRecordset メソッドのパラメータを試す

結論
JETデータベースエンジンでは OpenRecordset メソッドのパラメータに dbDenyWrite などを使用しても更新時間にはまったく影響はない。

#02で行った"レコード読み込み"とまったく同様の比較を"更新時"で行ってみました。ただし定数 dbReadOnly は更新時は使用できませんので除外してあります。

テストの概要としては、すでに10万件のレコードが保存されている、ID(オートナンバー型)、Data1(テキスト型)、Data2(テキスト型)の3つのフィールドから構成されるテーブルから、レコードを1件ずつ読込んで更新を行い、すべてのレコードを更新するのに要した時間を測定するものです。基本的なテストコードは次のようなものです。

  Dim dbs As Database
  Dim rst As Recordset
  Dim dummy

  Set dbs = CurrentDb
  ts_watch "テスト開始", True
  Set rst = dbs.OpenRecordset("TestData", dbOpenDynaset)・・・・・・条件を変えてみる部分
     'Set rst = dbs.OpenRecordset("TestData", dbOpenTable, dbDenyWrite)
  With rst
    Do Until .EOF
      .Edit
        !Data1 = "12345"
        !Data2 = "XYZ"
      .Update
      .MoveNext
    Loop
    .Close
  End With
  ts_watch "テスト完了"  


そして、テスト結果はつぎのようなものになりました。   
Recordsetのタイプ パラメータ 実行時間(秒)
Dynaset なし 12.0
dbDenyWrite 12.0
Table なし 7.8
dbDenyWrite 7.8
Table dbDenyRead 7.7

"dbDenyRead"のほんのわずかな違いを除けばまったく違いはありませんでした。読み込み時の違いがある程度更新時も現れると思ったのですがそれはないようです。よく考えてみれば、読み込み時に比べて処理時間のほとんどは更新処理に費やされているはずですので、その差が薄まってしまうのも当然かもしれません。ということは、これらの定数は1件ずつのレコードの読み込みや更新にはまったく影響がなく、コードの通り、OpenRecordset メソッドの実行時間だけに影響を与えるようです。

| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved