我正在使用標準的數據感知組件和dbExpress在Delphi 6 + MySQL數據庫中創建應用程序。該應用程序允許用戶查看網格中的記錄並編輯數據(插入和/或刪除記錄)客戶端。這些數據編輯僅在點擊提交按鈕後才寫入數據庫。所有這一切工作正常,並具有下列設置:在Delphi中使用ClientDataSet,你能夠在DBGrid中顯示Data&Delta記錄嗎?
控制: 1. DBGrid1鏈接到DataSource1直觀地顯示數據。 2.將DataSource1鏈接到ClientDataSet1以提供DBGrid要顯示的數據。 3. ClientDataSet1鏈接到DataSetProvider1以提供客戶端數據進行編輯。 4. DataSetProvider1是鏈接SQLDataSet1,它從單個數據庫表中選擇記錄。 5. SQLDataSet1鏈接到SQLConnection以提供與MySQL數據庫的連接。
操作: 1.用戶插入記錄:我使用ClientDataSet1.InsertRecord; 2.用戶刪除記錄:我使用ClientDataSet.Delete; 3.用戶提交數據:我使用ClientDataSet1.ApplyUpdates(-1);
這對於處理數據&發佈數據(包含DataSetProvider1BeforeUpdateRecord中的一個小黑客來刪除記錄)很有效。
現在我的問題: 當用戶第一次加載表單時,DBGrid1顯示所有原始記錄,刪除所有已刪除的記錄。但是,當用戶在ClientDataSet1中插入新記錄時,DBGrid1中會顯示一條空白記錄。實際數據不會丟失或設置爲NULLS,因爲當您將ClientDataSet1.ApplyUpdates記錄正確寫入數據庫時。
我知道TClientDataSet具有原始數據的數據屬性和編輯數據的增量屬性。這兩個屬性可以通過一次顯示在單個DBGrid中的數據在一次&仍然允許用戶編輯數據?
我看了30多個資源和演示應用程序&都避免了這個問題。這可以做到嗎?
爲什麼插入新記錄時出現空白記錄會出現問題?這不就是你填寫的空白記錄嗎? – LachlanG 2010-11-01 19:46:08
沒有。我運行ClientDataSet1.InsertRecord([字段值數組]); InsertRecord執行Insert然後Post事件。 一旦這樣做,DBGrid顯示一個不可編輯的空白記錄。我執行ApplyUpdates提交到數據庫,然後查詢數據庫表和新插入的記錄在那裏。問題是DBGrid未在新插入的記錄中顯示字段值。 – Forer 2010-11-02 06:15:26