Microsoft Access 掲示板

DAO のトランザクション分離レベル

2 コメント
views
4 フォロー

DAO でトランザクション分離レベルを知る方法はあるでしょうか。
ADO では検索してすぐに IsolationLevel プロパティ (ADO) だと判るのですが、
DAO でははっきりしません。
Workspace.IsolateODBCTrans プロパティ (DAO) がそれのようにも見えますが、
違うような気もします。

よろしくお願いします。

dtb
作成: 2023/10/30 (月) 04:35:20
通報 ...
1

自己レスです。とりあえず Workspace.IsolateODBCTrans プロパティ (DAO)  でいいのだと思っておきます。

2

リファレンスを読んだ限りでは、DAOには接続先DBのトランザクション分離レベルを確認するためのプロパティまたはメソッドは存在しないように見えます。
Accessデータベースエンジン以外への外部DBへの接続にはADOが推奨されていますが、
どうしてもDAOでAccess以外のDBに接続する必要があり、かつ事前にトランザクション分離レベルを知ることができない場合は
外部DB側にトランザクション分離レベルを返却するストアドプロシージャを用意してDAOで呼び出すなどの工夫が必要になるのではないでしょうか。

・Workspace.IsolateODBCTransについて

通常、同じDBへ接続する複数のWorkspaceのODBC接続は共有されますが、Workspace.IsolateODBCTransをTrueにすることで、Workspaceごとに個別のODBC接続を確立することができます。接続先DBがひとつの接続に対し複数のトランザクションの同時実行を許可しない場合は、複数のWorkspaceを用意しこのプロパティをTrueにすることでトランザクションの同時実行が可能になります。

<参考>
Workspace.IsolateODBCTrans プロパティ (DAO)
https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/workspace-isolateodbctrans-property-dao

ーーーー以下は上記リンク先より引用ーーーー
注釈

状況によっては、同じ ODBC 接続上で同時に発生する複数のトランザクションを保留状態にする必要があります。 これを行うには、それぞれのトランザクションに対して別々の Workspace オブジェクトを開く必要があります。 各 Workspace オブジェクトがデータベースに対して独自の ODBC 接続を確立できますが、これによりシステムのパフォーマンスが低下します。 通常、トランザクションの分離は不要であるため、同じユーザーが開いた複数の Workspace オブジェクトからの ODBC 接続は、既定で共有されます。

Microsoft SQL Server などの一部の ODBC サーバーでは、単一の接続における複数のトランザクションの同時発生は許可されていません。 このようなデータベースに対して同時に複数のトランザクションを保留状態にする必要がある場合は、各 Workspace オブジェクトを開いた直後に、その IsolateODBCTrans プロパティを True に設定します。 これにより、各 Workspace オブジェクトの ODBC 接続が別々に確立されます。