0

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 フィールドを編集できないようにし、新しいフォームを追加して名前を変更することです。新しいフォームを開く前に変更を保存し、更新クエリを介して更新を実行します。

4

2 に答える 2

0

フロントエンドに移動して、リンクされたテーブルからこれを編集することで違いが生じる理由がわかりません。ただし、テーブル リンクを削除してから、RE リンクを削除します。多くの場合、いくつかのプロパティが設定され、リンク時に読み取られます。バックエンド データベースに移動してテーブル プロパティの一部を変更する場合、多くの場合、テーブルを再リンクすることをお勧めします。

原則として、リンク テーブルを含む新しい列を SQL サーバーに追加する場合は、上記の手順を実行する必要があります。ただし、フロント エンドでリンクされたテーブルを削除し、RE リンクを試すことをお勧めします。これでこの問題は解決するはずです。

于 2010-09-10T10:40:54.453 に答える
0

解決策 (ハック) は、フォームの ID フィールドを編集できないようにし、新しいフォームを追加して名前を変更することです。新しいフォームを開く前に変更を保存し、更新クエリを介して更新を実行します。

原因は、テキストが 4K テーブル行制限をオーバーフローしたときに発生するテーブル ロックのエスカレーションです。

于 2011-08-16T03:17:10.477 に答える