2012-02-16 65 views
2

我有2個ClientDatasets在主細節使用一個提供者。 的2個基礎查詢被連接作爲主詳細數據源和所述主設備具有細節作爲場(是TdataSetField)TClientDataset在主細節不關閉細節查詢

我的問題是關閉主(甚至細節)數據集關閉主控查詢,但其詳細情況不會關閉......如果我們稍後嘗試使用相同的參數重新搜索相同的查詢,則會導致問題。

我想詳細查詢應該反正關閉...

任何幫助嗎?

謝謝

+4

所以你認爲關閉一個應該關閉另一個。你爲什麼不寫兩行代碼而不是一行:'Master.Active:= false; Detail.Active:= false;'完成。 – 2012-02-16 20:28:05

+0

完成已經... MCDS.Close; DCDS.Close;問題是通過提供程序連接到DCDS的TQuery不會自行關閉...如果我再次請求相同的數據,它將不會重新編寫詳細查詢,因爲它已經用相同的參數打開了!如果數據庫中的數據發生了更改(並且在我的情況下發生了更改...),它不會刷新。轉到另一個主記錄將會很好,因爲細節的參數會發生變化,並且會重新打開查詢。 – 2012-02-17 00:23:59

+1

你使用的是什麼版本的Delphi?我有一段時間沒有使用ClientDatasets,但我前段時間修改了默認提供程序,以更好地處理主細節(恕我直言)。它可以在http://cc.embarcadero.com/Item/24031 – 2012-02-17 01:22:46

回答

0

這是Delphi XE中的一個問題。它已經在質量中心(QC)101264。 您還可以在EDN的forum

中看到它提供商應自動打開或關閉主數據庫和鏈接的詳細數據集。所以目前沒有代碼master.close;,所以你可以添加一個detail.close;,正如一些評論所暗示的。如果您正在使用IBX,那麼即使事務組件在存在主控細節(QC 107456)時也未提交。

There's兩種解決方法:

  1. 您可以添加MasterDataset.OnAfterClose事件的detail.close;。請注意,這是而不是 MasterClientDataSet.onAfterClose。
  2. 您可以在Provider.Options中設置選項poFetchDetailsOnDemand。如果您不希望ClientDataSet只按需獲取細節的記錄,這可能會產生不良影響。