1

ユーザーの詳細を表示するフォームを作成しました。データは3つのテーブル(table1、table2、table3)に分割されています。table1には、他のテーブルのデータにリンクするための外部キーがあります。

table1のみが挿入された場合、デフォルトのprevious、next、およびnewレコードセレクターは正常に機能しました。ただし、他の2つのテーブルを挿入した後、フォームは新しいレコードを作成できません。

table2とtable3がtable1のforiegnキーにリンクしようとしているためだと思います。

「新規レコード」を押すと、「指定したレコードに移動できません」が返されます。

4

2 に答える 2

1

あるユーザーがすでに指摘しているように、ストアドプロシージャは、利用可能な場合、マルチテーブルのエントリと編集を行うための好ましい方法です。これは基本的にトランザクションであり、トランザクションでは通常、エラーが発生したときにロールバックできます。

Access 2010には、データベースエンジンに組み込まれたストアドプロシージャ機能がありますが、以前のバージョンのAccessにはありません。SQL ServerやMySQLなどの他の一般的なデータベースサーバーにも、ストアドプロシージャ機能があります。これらのデータベースのいずれかでストアドプロシージャを実行/呼び出すには、パススルークエリを使用するか、ADOを使用する必要があります。

Accessには、フォームレベルでRecordsetTypeをDynasetInconsistentUpdatesに変更するオプションがあります。これにより、フォームはレコードセットの基礎となるクエリ内の関係を無視できますが、関係ウィンドウで定義された関係は引き続き尊重されます。あなたはここでそれについての議論を見ることができます:http ://www.utteraccess.com/forum/Dynaset-Inconsistent-Upd-t1664392.html

その議論で指摘されているように、クエリを使用している場合でも、単一のテーブルのみに基づいて作成されるようにデータ入力フォームも設計します。次に、関連するテーブルにあるデータのサブフォームを使用します。これは、MSAccessのほぼ標準的な設計手法だと思います。.NETなどの環境で設計されたソフトウェアは、通常、開発者がすべてのCRUD操作のコードを作成する必要があるため、これに違反しやすくなります。これにより、開発者はより柔軟に対応できます。

于 2012-04-18T12:01:08.883 に答える
0

使用しているコントロールがわかりませんが、それでも、クラッド操作用のストアドプロシージャを作成することをお勧めします。これは、複数のテーブルを更新するための良い方法です

于 2012-04-18T00:24:18.200 に答える