我有一个简单的TClientDataSet组件,用于填充一些数据感知组件。但是,如果我使用此数据集将数据插入到我的数据库中,我似乎无法找到将其同步回我的TClientDataSet组件的正确方法。
我如何实现这一目标?
答案 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然后打开它。