そのナレッジベースの記事に変更はなかったと思います。ただし、レコードロックがどのように実装されたかを覚えておく必要があります。
ネットワーク上の任意のユーザーによるテーブルが開かれ、それらのユーザーが行ロックを有効にしている場合、DAO / ADO/ACEがコードでそのテーブルをどのように開くかは重要ではないことに注意してください。
行ロックを使用している既存のユーザーは、使用しているそのレコードに対して行ロックを強制します。また、そのレコードセットコードが適切な時間レコードを開いたまま/ロックしたままにすることは非常にまれであるため、ページロックまたは行ロックがここで違いを生むことはめったにありません。したがって、ほとんどの場合、ユーザーがフォームのデータを編集している場合は、ロックが必要です。コードの場合、それはまれな問題になる傾向があります。
したがって、tools-> optionsのユーザー設定は、実際にユーザーのこの選択を決定します。ここで明確にし、髪の毛を分割しないようにするために、UIの行ロック設定は、デフォルトで問題を強制するのと同じくらい、実際には選択をオーバーライドしません。
この機能をオンにしたときの行ロックの仕組みを覚えておいてください。ジェットエンジンはレコードのサイズを1ページのサイズに拡大するだけなので、以前と同じように昔ながらのページロックを使用します。これは私が問題を強制することによって意味するものです。ユーザーが行ロックをオンにした場合、豆の山が変わることはありません。次に、行ロックでreocrdssetを開かなかったレコードセットを使用して、ユーザーによってロックされたレコードを取得しようとします(ページロックとは対照的) )。これは再びページ解像度に帰着するため、レコードをロックして編集することは許可されていません。
真の行ロックのようなものはありません。ただし、レコードのサイズを常に1ページに拡張すると、ラウンドアバウトで同じ目標を達成できます。
上記の情報を考えると、これは2つのことを意味します。
まず、ユーザーがすでにフォームでレコードをロックしている場合に、reocdsetをページまたは行として開いても、違いはありません。データを編集するユーザーは、ページのどれだけが使い果たされるかを決定します(そして、行ロックがオンになっている場合、それはデータの完全なページです)。
第2号。編集された各レコードが1つのデータベースページを占有することを余儀なくされるため、ファイルが非常に急速に肥大化するため、このオプションの使用について長く真剣に考える必要があります。何千ものレコードを更新するコードを実行している場合は、これを実行したくない可能性があります。ただし、ユーザーは1日にそれほど多くのレコードを編集することはできず、毎日の圧縮ルーチンを使用すれば、問題になることはありません。
論理的には、これは、このオプションが実際に役立つのは、ユーザーが互いにつまずいたときにデータを編集する場合のみであることを意味します。ただし、レコードセットコードの場合、行ロックを使用することが役立つことはめったになく、適切でさえありません。
結局のところ、この機能は、同じフォームで同じデータにアクセスしようとしているユーザーが複数いる場合にのみ適切です。したがって、これはコード+reocordsetsを使用する機能というよりもユーザーインターフェイス機能です。
ACE + daoが行ロックを使用してreocrdsetを開くことができることに気付くかもしれませんが、なぜ心配するのでしょうか。あなたはダオを使わない、そしてあなたはとにかくそれが好きではない。そして、とにかくユーザーシナリオを変更することはありそうにありません。
- 編集:
このレコードページのロックを説明する便利なリンクがありません。私はこれをどこかで読んだことを知っていますが、リンクがありません。
私はここ数日本当に忙しかったです(私はaccess 2010ベータ版の一部であり、月曜日にはサインアップした一般の人々にリリースされたCTPもあります)。だから、私は最近本当に忙しかったです。
ただし、これを表示するコードを試すことができます。次のコードは、行ロックがオンになっていないmdbで約1メガの膨張を引き起こします。(約5.8メガから約6.5メガになります)。
Dim rst As DAO.Recordset
Dim i As Long
Dim t As Single
Set rst = CurrentDb.OpenRecordset("contacts")
t = Timer
Me.Text1 = "working..."
DoEvents
Do While rst.EOF = False
rst.Edit
i = i + 1
rst!City = "ci " & i
rst.Update
rst.MoveNext
If i Mod 500 = 0 Then
Me.Text1 = i
DoEvents
End If
Loop
t = Timer - t
Me.Text1 = "done in " & t & " seconds"
Beep
レコードロックをオンにして同じコードを実行すると、ファイルのサイズはなんと123メガバイトになります。上記のコードが含まれているサンプルmdbへのリンクは次のとおりです
http://www.kallal.ca/test/bloat.zip
したがって、上記をダウンロードしてください。ツール->オプション->詳細->行レベルのロックで開くで実行します。
次に、テーブルを空にします。コンパクトで修理します。上記の設定を変更して再度実行します(必ず終了し、その設定を変更した後、データベースに再度アクセスしてください)。
行をロックせずに上記を実行すると、ファイルは約1メガ増加します。行ロックをオンにして実行すると、110メガをはるかに超えるデータファイルの増加が得られます。それは確かに非常に大きな違いです。