考えられる解決策がいくつかあります。
1 つの解決策は、WHERE 句を使用して問題のフォームを開いて、多くの行ではなく 1 つの行のみを開くことです。
上記は、問題のフォームが継続フォームでない場合の実用的な提案にすぎません。
だからあなたは行きます:
strInvoice = inputbox("What invoice to work on")
docmd.Openform "frmInvoice",,,"[invoiceNum] = " & strInvoice
そのため、フォームを 1 行に制限すると、invoice 列にインデックスがあると仮定してこれが修正されます。また、このようなデザインは、よりユーザーフレンドリーになる傾向があります。ここで、この重要な検索の概念について説明します。
http://www.kallal.ca/Search/index.html
この問題を解決する別の方法は、フォームにすべてのレコードを強制的に入力することです (これは、パフォーマンスの観点からは本当に悪い考えです。SQL サーバーがなくても、上記のように where 句を使用せずにフォームを起動するのは悪いことです)。ユーザーの観点からのアイデア、およびパフォーマンスの観点からのアイデア)。
テーブル ロックが頻繁に発生する理由は、フォームが SQL サーバーからのデータのプルを開始した後、Access が「ちょっと待って、十分なデータがあります」と表示するためです。クライアントに送信します (したがって、クライアントがレコードの流れを停止することが、実際にロックの原因となります)。したがって、この問題を防ぐためにできることは、move last を実行してすべてのレコードをプルすることです。これにより、テーブル ロックが解消 (解放) されます。
したがって、フォームのオンロード イベントでは、次のように移動できます。
me.recordset.MoveLast
me.recordset.MoveFirst
指摘したように、ここでの問題は、すべてのレコードをフォームにプルすることは、そもそも非常に悪い設計であるということです。
最後に:
テーブル ロックを排除するもう 1 つの方法は、ビュー SQL サーバー側としてクエリを作成し、NOLOCK ヒントを含めることです。次に、ビューへのリンクを設定し、ローカル クエリではなくビューのフォームに基づいてフォームを作成します。ビューには NOLOCK ヒントがあるため、上記のように movelast/movefirst の提案は必要ありません。
したがって、ここにいくつかの解決策がありますが、1 つのレコードに対してフォームを開くことが実際に推奨される解決策です。つまり、現金自動預け払い機に近づくと、すべてのアカウントがダウンロードされず、どのアカウントで作業するかを尋ねられます。Google などの検索エンジンを使用すると、インターネット全体がダウンロードされず、何を検索するかを尋ねられます。ソフトウェアを書いている人は言うまでもなく、バス停にいるおばあさんでもこれを理解できます。
したがって、Access でフォームを設計および作成する場合、すべてのレコードをテーブルからフォームにダウンロードして、ユーザーに検索させることはほとんど意味がありません。そのため、フォームが読み込まれる前に何を処理するかをユーザーに確認する必要があり、フォームを開くときに where 句を使用する場合でも、フォームが SQL サーバーへの大きなリンク テーブルにバインドされている場合は、そのレコードのみが必要です。 where句に一致すると、そのフォームに引き下げられます。
where 句を使用しないと、前述のように、ロックの問題が頭をよぎります。
一時的な修正として、ロード時にフォームで movelast/movefirst を試してください。ロックの問題が修正されるはずです。ただし、長期的には、where 句を使用するか、ビューのアイデアを検討することをお勧めします。
4 つのテーブルのいずれかに基づくコンボ ボックスがある場合は、コンボ ボックスがデータを要求するため (SQL サーバーはその要求中にテーブル ロックを配置するため)、再びロックの問題が発生することに注意してください。また、再度 Access は SQL Server にコンボ ボックスのロードを停止するように指示します。これは、すべての行がまだ必要でないためです (ただし、テーブル ロックが発生したため、遅すぎます)。
そのため、使用されているテーブルのいずれかに基づいてそのフォームにコンボ ボックスがある場合、再びテーブル ロックが発生することがわかります。これらの場合、NO LOCK ヒントを使用したパススルー クワイア、または再び no-lock ヒントを使用したビューに基づいてコンボ ボックスを作成することをお勧めします。
そのため、これらのテーブルのいずれかに基づくコンボ ボックスのフォームを確認してください。テーブル ロックも発生します。