ClientDataSet中修改,刪除,添加數據和Delta屬性


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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM