Microsoft Access 掲示板

adLockPessimisticは他のユーザの読み取りも禁止するか

2 コメント
views
4 フォロー

ADO レコードセットで、adLockPessimistic の指定ができます。
これについて、公式でこう説明されてます。

https://learn.microsoft.com/ja-jp/sql/ado/guide/data/types-of-locks?view=sql-server-ver16
>他のユーザーがそのレコードを使用できなくなることを意味します。
https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/locktypeenum
>レコード単位の排他的ロックを指定します

「排他ロック」は、一般的にこういう意味だと承知しています。

排他ロック(占有ロック)とは - 意味をわかりやすく - IT用語辞典 e-Words
https://e-words.jp/w/排他ロック.html
>ロックの方式のうち、他の主体による参照や書き込み、削除、ロックなどを完全に遮断し、処理の終了まで完全に独占するものを排他ロックという。

これらに従ってか複数のサイトが「他のユーザは読み取りもできない」と解説しているのですが、
私がテストしたところフォームからもコード(別の接続)からも読み取れるのですが、
私が間違っていそうでしょうか。
rst.LockTypeがadLockPessimistic以外に自動修正されていないのは確認済みですが、
設定次第で他のユーザの読み取りも禁止できるのでしょうか。

詳しい方のご意見を伺いたく、よろしくお願いします。

banjo
作成: 2023/12/09 (土) 12:07:20
通報 ...
1

公式の解説はなんかわかりにくいですね
排他ロック、共有ロックとはいってなくて排他的ロック、共有的ロックと濁してます。

定数のOptimistic、Pessimisticは楽観的、悲観的という意味なので、楽観ロックと悲観ロックの違いで意味を調べた方がいいように思います。

排他制御 悲観ロック 楽韓ロック - Google 検索

上記のリンク先をいろいろ見たけど、悲観ロックに関して読み取りまで禁止するかどうかは、ぶれがあるようです。DBによって実装が違うのでしょうか。

質問のMSの公式のリンク先の説明では
「レコードごとのペシミスティック ロックを示します。」
「レコード単位の排他的ロックを指定します。」
とレコード単位でのロックとしてます。
だとするとレコード単位で読み取りを許可しない(編集中のレコードのみ表示されない)という実装は考えにくいので、他ユーザーのレコードの読み取りは許可するが、更新はできない、という実装かと推測されます。

私はこのような理解でおりますが、どうでしょうか。

2
banjo 2023/12/09 (土) 15:19:07 dff57@9daea

>hatena様
私もそういう実装だと思っていたので、
ヘルプや検索してすぐに見つかった記事……例えばADOを解説した(だいぶ古い)記事で
こういうのを見つけて もやもや しました。「的」を使ってこの解説です。

Windows 2000 - Development Guide for Business Applications
https://www.itmedia.co.jp/help/howto/win/win2000/0007special/complus_vb/chap1/05.html

排他的ロックと共有的ロックのどちらを使うのかは,場合によって異なる。排他的ロックを使った場合には,誰かが編集作業に入ると,ほかのユーザーはそのレコードにアクセスできなくなる(書き込みだけでなく読み取りも不可になる)。

引用した MS Learn の一つは「適用先: Access 2013」と明記があるのですが、
「(バックエンドの)DBによって実装が違う」のかよく分からないのが困り物です。
昨日は rs.Supports(adResync) が True でも Resync が機能しなくて悩みましたし……
PostgreSQL でも入れて比較すればいいじゃん、と言われればそうなのですが……

ともあれ、hatena さんもそういうご見解であれば安心です。
ありがとうございました。