2009-05-05 17 views
1

私はDelphi 7 + Zeos + MySQLを使用しています。マスターテーブルをポストしようとすると、詳細データセットが最初にポストされ、データベースの参照整合性例外が発生します。マスター表のIDが必要です。マスター/詳細動作

この動作を元に戻すことはできますか?詳細の前にマスターテーブルを保持することはできますか?

+0

を私たちにコード –

+0

を表示してください行う必要はありませんこれはデフォルトの動作です。私がこのように使用しようとするたびに、私は同じ問題を抱えています。 –

答えて

1

私はそれがちょうど方法TDataSetの仕事だと思う。未送信の明細レコードがある場合は、マスタを選択します。 Post私は正しく覚えている場合はPostに強制します。

だから私はあなたが何か持って推測しています:あなたが最初にマスターを掲載することにより、この問題を回避することができるはず

tblMaster.Insert; 
tblMaster.FieldByName('foo').Value := 'foo'; 
tblDetail.Insert; 
tblDetail.FieldByName('bar').Value := 'bar'; 
tblMaster.Post; // error! 
tblDetail.Post; 

tblMaster.Insert; 
tblMaster.FieldByName('foo').Value := 'foo'; 
tblMaster.Post; 
tblDetail.Insert; 
tblDetail.FieldByName('bar').Value := 'bar'; 
tblDetail.Post; 
+0

eed3si9n、あなたの答えをありがとう、確かにそれは仕事を終わらせるための一つの方法ですが、この特定のケースでは当てはまりません、真実では、私はこの方法論を松葉杖として使っていますが、私はあなたを見せます:私は2つの異なるテーブル、基本テーブルとより詳細なフィールドを持つ補完的なテーブルへのインターフェイスを実行するフォームを持っています。ユーザーにとっては、唯一のものです.1つの「保存」ボタンを押す必要があります。 –

+0

私はkillソリューションを持っていませんが、気楽な方法でそれをスキップしようとしています。マスターテーブルに挿入が発生すると、ディテールテーブルが無効になり、入力データがメモリにキャッシュされますポストマスタ後に、詳細を有効にしてメモリキャッシュデータを永続データセットにコピーします。 2つのテーブルでうまく動作しますが、2つ以上のテーブルで使用するように拡張しようとしています。 –

関連する問題