ClientDataSet中使用Post提交變更的數據時,實際上並沒有更新到后端數據庫中,而是提交到了由DataSnap管理的數據緩沖區中。當使用了ClientDataSet.ApplyUpDates(MaxErrors:integer)方法才更新到數據庫中。ApplyUpDates方法也只更新修改的數據,這些數據放在ClientDataSet.Delta屬性中。調用AppplyUpDates更新到數據庫的同時Delta中的數據也會被清空,注意最后的對話框。下面對數據進行修改,刪除等操作,並查看Delta中的數據。
效果圖:

**************************************************************************************
具體操作:
**************************************************************************************
連接DBGrid1:
DBGrid1.DataSource->DataSource1.DataSet->ClientDataSet1.ProviderName->DataSetProvider1.DataSet->
SQLDataset1.SQLConnection->SQLConnection1具體數據庫(這里連接的是oracle中的EMP表);
SQLDataSet1.CommandText:=SELECT * FROM EMP;ClientDataSet1.Active:=true;
DBNavigator1.DataSource->DataSource1;
連接DBGrid2:
DBGrid2.DataSource->DataSource2.DataSet->ClientDataSet2;
將以上用到的控件放入一空白工程中,並按上面的設置連接好控件。
**************************************************************************************
相關CODE:
**************************************************************************************
procedure TForm3.Button1Click(Sender: TObject); begin // 刪除和添加數據不觸發AfterPost事件,手動賦值 // 把ClientDataSet1的Delta中的數據給ClientDataSet2中的Data屬性,讓DBGrid2顯示處理數據的細節 ClientDataSet2.Data := ClientDataSet1.Delta; StatusBar1.Panels[0].Text := format('Delta數據計數:%d', [ClientDataSet2.RecordCount]); end; procedure TForm3.Button2Click(Sender: TObject); begin // 將修改的數據提交到數據庫,0表示不允許發生錯誤 ClientDataSet1.ApplyUpdates(0); ClientDataSet2.Data := ClientDataSet1.Delta; end; procedure TForm3.ClientDataSet1AfterPost(DataSet: TDataSet); begin // 把ClientDataSet1的Delta中的數據給ClientDataSet2中的Data屬性,讓DBGrid2顯示處理數據的細節 ClientDataSet2.Data := ClientDataSet1.Delta; StatusBar1.Panels[0].Text := format('Delta數據計數:%d', [ClientDataSet2.RecordCount]); end;
