DAOのOpenRecordset dbReadOnlyでテーブルを読み取り専用にできるでしょうか?
OptionsとLockEditに入れられるようですが、
読み取り専用になるのが解説によって「自分だけ」「他人だけ」「全員」で分かれています。
私がいじったところOptionsに入れて自分だけ読み取り専用、
LockEditに入れてエラー「引数が無効」ですが、
もう何だか分からなくなってしまいました。
詳しい方から教えていただけると大助かりです。よろしくお願いします。
DAOのOpenRecordset dbReadOnlyでテーブルを読み取り専用にできるでしょうか?
OptionsとLockEditに入れられるようですが、
読み取り専用になるのが解説によって「自分だけ」「他人だけ」「全員」で分かれています。
私がいじったところOptionsに入れて自分だけ読み取り専用、
LockEditに入れてエラー「引数が無効」ですが、
もう何だか分からなくなってしまいました。
詳しい方から教えていただけると大助かりです。よろしくお願いします。
dbReadOnly はOptionsだけだと思いますが。(下記参照)
Options引数
RecordsetOptionEnum 列挙 (DAO) | Microsoft Learn
LockEdit引数
LockTypeEnum 列挙 (DAO) | Microsoft Learn
上記のMSの公式のリンク先の解説では、
dbReadOnly Recordset を読み取り専用として開きます。
となってます。開いたRecordsetが読み取り専用になるということだと読み取れます。他のユーザーが更新できないとは書かれてません。
他のユーザーがレコードを変更できないようにするなら、下記ではないでしょうか。
dbDenyWrite 他のユーザーが Recordset のレコードを変更できないようにします。
私は下記のように理解しています。もし、試した結果が異なる場合は指摘してください。
気になって検索してみたら、間違った(?)解説してあるサイトが結構ありますね。
このような場合はまずはMSの公式を参照して確認するのがいいです。
ただ、公式もたまに間違っているときがありますので、実際にテストして確認するということも必要になります。
>>hatena様、情報を整理して紹介して下さってありがとうございます。
hatenaさんがおっしゃれば心強いです! 私もやっと安心です。
それが、まさに Database.OpenRecordset メソッド (DAO) のページにあるようで……
https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/database-openrecordset-method-dao
ただ、検索していると昔は入れられた節があり???、修正漏れなのかもしれません。
「間違った(?)解説」は、海外の出版物でもちょくちょく出会い、本当に戸惑いました。
ともあれ本当にありがとうございました!
あら、読み落としてました。
ちょっと意味不明な注意書きですね。
ちなみにこんなことをする必要はありませんが、間違えてたまたま dbReadOnly + dbFailOnError にしたところ、自分は更新できる・他のユーザは更新できないという振る舞いもしました。このへんも完全に謎ですが、正統と思われる hatena さんの書いて下さった感じで使いたいと思います。
いえ、全然、正統ではないです。
WEB上の情報と、自分の少ない経験のみですので。
結局、最終的には自分で試してみるしかないですね。
hatena さんに責任を負わせたいのではないのでご安心を(笑)。
私もいろいろ試した上で、そのようにしたいと自己責任で判断しました。
ちょっと考えが進んだので、書き残させて下さい。
試した感じだと、この両方が自分更新可・他者更新不可で動くようです。
Set rs = db.OpenRecordset("table1", dbOpenTable, dbReadOnly + dbFailOnError)
Set rs = db.OpenRecordset("table1", dbOpenTable, dbFailOnError, dbReadOnly)
判断できるのは、
Access のほうで、「ロールバックを想定してるんならおまえが操作するんだよな?」ということで
切り替えてくれるらしいこと。
一応 LockEditにdbReadOnlyが受け付けられるパターンがあること……です。
ただし、(飽くまでも私の環境では)何か動作が不安定な感じがあるので、
MS の公式外、保証外、裏技、昔はできたけど既に見捨てられた何かなのかもしれません。
このへんのせいで、日本語でも英語でも解説が散らばったのかもしれません。
「かもしれない」が続きましたが、改めて言って、
hatenaさんが書いて下さったところが本道なのだと思います。
私もそちらに従わせていただきます。