2012-02-16 8 views
2

1つのプロバイダを使用してMaster Detailに2つのClientDatasetsがあります。 2つの基本クエリーがデータソースのマスターディテールとして接続されていて、マスターがフィールドとしてディテールを持っています(TDatasetField)TClientDataset詳細情報クエリを終了しません

私の問題は、マスタークエリーを閉じてマスタークエリーを閉じるとディテールが同じパラメタで後で同じクエリをrepoenしようとすると、問題が発生します。

とにかく詳細クエリを閉じてください。

助けが必要ですか?

ありがとうございました

+4

したがって、1つを閉じるともう一方を閉じる必要があると想定します。 'Master.Active:= false;というコードではなく、2行のコードを書いてみてください。 Detail.Active:= false; '完了。 –

+0

既に完了しています... MCDS.Close; DCDS.Close;問題は、プロバイダを介してDCDSに接続されたTQueryが閉じないということです。同じデータを再度要求すると、同じパラメータですでに開いているので、詳細クエリをrepoenしません!データがデータベース内で変更された場合(それは私の場合に変更された...)、リフレッシュされません。詳細のパラメータが変更され、クエリを再度開くと、別のマスタレコードに移動すると問題ありません。 –

+1

あなたはどのバージョンのDelphiを使用していますか?私はしばらくClientDatasetsを使用していませんが、マスターディテール(IMHO)をはるかに上手く処理するために、以前はデフォルトプロバイダを変更しました。 http://cc.embarcadero.com/Item/24031 –

答えて

0

これはDelphi XEの問題です。すでにQuality Central(QC)101264にあります。 また、EDNのそれについても見ることができますforum

プロバイダは、マスターおよびリンクされた詳細データセットを自動的に開くか閉じる必要があります。したがって、master.close;への現在のコードはありませんので、いくつかのコメントが示すようにdetail.close;を追加することができます。 IBXを使用している場合、マスターディテール(QC 107456)がある場合、トランザクションコンポーネントでもコミットされません。

There's 2つの回避策:

  1. あなたはMasterDataset.OnAfterCloseイベントでdetail.close;を追加することができます。これはではなく、 MasterClientDataSet.onAfterCloseであることに注意してください。
  2. Provider.OptionsにオプションpoFetchDetailsOnDemandを設定できます。これは、ClientDataSetが必要に応じてディテールのレコードのみをフェッチすることを望まない場合、望ましくない効果をもたらす可能性があります。
関連する問題