トランザクションと定義域集合関数

トランザクション中に定義域集合関数を使う場合には注意が必要です。トランザクションを開始してから加えた変更は DLookup などの定義域集合関数には反映されません。それに対し、Recordsetオブジェクトを使った場合はコミットする前でも変更が反映されます。

以下のサンプルはトランザクション中で、レコードのないテーブルに一件のレコードを追加し、これをDLookupとRecordsetの2つの方法で表示させようというものです。フィールド:f1を持つテーブル:T1を予め作成してこのプロシージャを実行してください。

1
2
3
4
5
6
7
8
9
10
11
Sub Temp()
BeginTrans
CurrentDb.Execute "INSERT INTO T1 (F1) VALUES(100)", dbFailOnError
MsgBox "F1(DLookup):" & DLookup("F1", "T1")
With CurrentDb.OpenRecordset("T1", dbOpenDynaset)
.MoveFirst
MsgBox "F1(Recordset):" & !f1
.Close
End With
CommitTrans
End Sub