2011-09-23 76 views
0

我正在使用TADOConn和TADODataSet單位拉取數據並連接到TDataSources和TDBGrids。我有我的DBGrids正確顯示信息和詳細信息視圖中的編輯信息準確地反映在後備數據庫中。在更新Delphi中的單元格時更新Master-Detail視圖中的DBGrids

我想要做的就是讓細節DBGrid中的字段的更新導致兩個數據集上的刷新,以便始終顯示最新的數據。

我曾嘗試在不同級別的數據庫訪問中的幾個事件處理程序中進行刷新調用,但它們似乎都有類似(但不同)的再入問題。

到目前爲止,我已經能夠提出的最好方法是通過調用刷新細節DBGrid.onColExit事件來更新主視圖。

如果我將更新呼叫全部保留在一起,直到下次運行應用程序纔會顯示更新的信息。

任何想法如何實現這一目標?我爲什麼錯了?提前致謝。

回答

1

您意味着您在DBGrid中所做的更改將發佈到數據庫中,但不會顯示在網格中或保存在其數據集中,並且您必須從數據庫中取回它們。我用過的所有數據集組件都維護其數據副本,包括通過它傳遞給數據庫的所有更改。如果您希望通過觸發器或其他進程更改數據,則可能需要刷新數據。那麼您將不得不處理當前記錄位置丟失的可能性,即當前記錄在數據庫中被刪除。

我會嘗試使用Dataset.AfterPost事件來啓動刷新。如果發生奇怪的事情,我會考慮使用Timer來延遲刷新。

+0

這可能工作,我會試試看。我認爲唯一的問題是無論我在哪裏放置延遲,它仍然處於執行的同一個線程中,並且存在重入問題。我會回覆一些結果。 – dpsthree

+0

定時器的一個目的是打破可能導致重入問題的執行鏈。另一個目的是在刷新之前允許其他事情發生,這可以減少所需刷新的次數。 – crefird

+0

沒有運氣,因爲計時器必須在事件處理程序鏈中的某處被解僱,所以我們只是推遲了不可避免的事情。我能夠想出的唯一解決方案是獨立更新按鈕,可獨立刷新兩個數據集。 – dpsthree

相關問題