Ok。簡単な背景: Access 97 からアップグレードされた 2003/2003 形式の MDB ファイルを使用する MS Access 2003。
この例では、2 つのテーブルがあります。
Table 1
Asset
ID - (text 20)
ParentID - (text 20)
Other fields
AssetRels
ID - (text 20)
Asset にレコードが追加されると、ID が AssetRels に追加されます。
Asset.ID から AssetRels.ID までの間には、カスケード更新とカスケード削除による参照整合性を強制する関係が存在します。
AssetRels.ID から Asset.ParentID へは、カスケード更新のみで参照整合性を強制する関係があります。
アセットに 2 つのレコードがあります
VACU0703200, NULL
VACU0703250, VACU0703200
データ DB で、テーブルにアクセスして VACU0703200 を VACU0704500 に変更すると、変更が期待どおりに反映されます。
データ DB にリンクしているフロント エンド DB を開き、(テーブルで直接) 同じ変更を試みると、「更新できませんでした。現在ロックされています」(いいえ、「別のセッション」については何もありません。それがエラー メッセージ全体です) )
両方のデータベースは、「デフォルトのレコード ロック」に対して「ロックなし」に設定されています。
明らかに、カスケード更新の動作を妨げている行/ページ/テーブル レベルのロックにはいくつかの違いがあります。
このエラーを停止するためにどこかで使用できるプロパティ設定を知っている人はいますか? リレーションシップを削除する必要はありませんが、削除する必要があり、コードで処理する必要がある場合があります。
編集: 原因は、テーブルにメモ フィールドが含まれていることです。どうやら、リンクされたテーブルを介して、メモ フィールドがオーバーフローすると、4K 行のサイズがテーブル ロックにエスカレートします。それが問題を引き起こします。
解決策 (ハック) は、フォームの ID フィールドを編集できないようにし、新しいフォームを追加して名前を変更することです。新しいフォームを開く前に変更を保存し、更新クエリを介して更新を実行します。