如何在不知道的情况下更新对数据库所做更改的TClientDataSet?

时间:2011-09-23 14:34:59

标签: database delphi

我有一个简单的TClientDataSet组件,用于填充一些数据感知组件。但是,如果我使用此数据集将数据插入到我的数据库中,我似乎无法找到将其同步回我的TClientDataSet组件的正确方法。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

TClientDataSet组件具有一个完全相同的Refresh方法。但是,花了一些时间让我在文档中找到这个。 :)

来自文档:

  

来自DB.pas

     

程序刷新;

     

从数据库中重新获取数据以更新数据集的数据视图。

     

调用Refresh以确保应用程序具有数据库中的最新数据。例如,当应用程序关闭数据集的过滤时,应立即调用“刷新”以显示数据集中的所有记录,而不仅仅是那些用于满足过滤条件的记录。

     

注意:Refresh方法不适用于所有TDataSet后代。特别是,如果查询不是“实时”,则TQuery组件不支持Refresh方法。要刷新静态TQuery,请关闭并重新打开数据集。      TDataSet在刷新记录之前生成BeforeRefresh事件,之后生成AfterRefresh事件。

     

注意:调用refresh时,大多数数据集会尝试保持当前记录位置。但是,这并不总是可行的。例如,当前记录可能已被另一个用户从服务器中删除。单向数据集没有在刷新后定位当前记录的机制,并且总是移回第一条记录。

     

警告:单向数据集通过关闭并重新打开游标来刷新数据。例如,如果您在BeforeClose,AfterClose,BeforeOpen或AfterOpen事件处理程序中有代码,则会出现意外的副作用。

答案 1 :(得分:2)

关闭并打开CDS并不适合我。我正在使用Delphi XE2,Update 3,ADO表连接到Access 2007数据库。我可以刷新CDS中数据的唯一方法是:

procedure TForm1.PeopleRefreshButtonClick(Sender: TObject);
// this actually re-loads the data from the table!
begin
  DM1.PeopleTable.Close;
  DM1.PeopleTable.Open;
  DM1.PeopleCDS.Refresh;
end;

表单上的刷新按钮关闭,然后打开表。然后我刷新ClientDataSet。

答案 2 :(得分:0)

基本上,您必须关闭TClientDataset然后打开它,以与原始方式相同的方式从数据库加载数据。如果TClientDataset连接到TDataSetProvider,后者连接到TDataset / TQuery后代,您只需关闭TClientDataset然后打开它。