2012-03-20 10 views
0

アクセスバックエンドを問題なく使用していたAccess 2003フロントエンドがあります。私は最近Accessバックエンドを代わりにSQL Server 2005を使用するように切り替えましたが、私はまだこの最後の問題を把握することができませんでした。何か助けていただければ幸いです。親子フォームの多対多の関係がデータ入力を制限しています

私は多対多の関係で二つのテーブルがあります。

tblMembership <--> tblLinkPersonMembership <--> tblPerson 

プライマリキーフィールドはmembershipIdとPERSONIDで、リンクテーブルは両方と他には何が含まれています。

Accessアプリケーションには、tblMembershipをレコードソースとして使用するフォームがあります。これは、レコードソースが

SELECT * 
FROM tblPerson INNER JOIN tblLinkPersonMembership 
    ON tblPerson.personId=tblLinkPersonMembership.personId; 

の子フォームを持ちます。これは、Access(2003)データベースをバックエンドとして使用するとうまくいきます。今、バックエンドのSQL Server 2005であることを、私はサブフォーム上の2つのレコードを入力することができますが、特定の会員のための第三者レコードを保存しようとしたとき、私は次のエラーを取得する:

The Microsoft Jet database engine cannot find a record in the table 
'tblPerson' with key matching field(s) 'tblLinkPersonMembership.personId'. 

私が閉じている場合フォームを開いてそのメンバーに戻って(現在2人が関連付けられています)、さらに2人(#3人と#4人)を入力できますが、5人目に入ろうとすると同じエラー。私はフォームを閉じて、もう一度開いて、2つ以上の広告の間違いを追加することができます。

私は少し混乱しています。私が行った研究は何も見つかりませんでした。どんな助け?

答えて

0

私はAccessフォームとSQLを並べて開くことから始めます。問題のない2(?)レコードを入力できるので、1つのレコードを入力してデータベース(3つのテーブル)を調べ、そこにどのような種類のデータがあるかを調べます。次に、2番目のレコード。主要な焦点はPKs/FKsであろう。また、Accessフォーム(PKs、FKs)にすべてのキー列を入力して、どのように満たされるかを確認します。

親子関係。 "SELECT *"を使用すると、2つのpersonId列が取得されます。 tableName.personIdを使用している限り、あなたはうまくいくはずですが、チェックする価値のあるものです。例えば。あなたはtblLinkPersonMembershipでFKを更新する一方で、あなたがtblPersonのPKを編集していないことを確認すること。