clientdataset.refresh检索旧数据

时间:2013-08-16 15:11:35

标签: mysql delphi delphi-xe3 dbexpress

我正在使用带有MySQL数据库的Delphi XE3。我有一个SQL连接 - SQLquery - DataSetProvider - ClientDataSet安排。当我对CDS进行修改ApplyUpdates时,更改会在数据库中正确影响,但是当我刷新CDS时,将替换“旧”值。我正在使用的代码是:

 CDS.IndexFieldNames:='pop0';
 CDS.first;
 for W := 1 to 5 do begin  //   display the original data
  memo2.lines.add (IntToStr(CDS['pop0']));  CDS.Next;
 end;
 memo2.lines.add('');

  CDS.first;
  CDS.Edit;                   //    modify data
  CDS['pop0']:= 3004;
  CDS.Post;
  CDS.first;
 for W := 1 to 5 do begin   //   display the modified data
  memo2.lines.add (IntToStr(CDS['pop0']));  CDS.Next;
 end;
 memo2.lines.add('');

 CDS.ApplyUpdates(0) ;
 messagedlg('Check database',mtInformation,[mbOK],0);
 CDS.refresh;

 CDS.first;
 for W := 1 to 5 do begin   //   display the updated data
  memo2.lines.add (IntToStr(CDS['pop0']));  CDS.Next;
 end;

备忘录中的输出如下:

3
4
375
597
678

4
375
597
678
986

3
4
375
597
678

我试图关闭并打开CDS作为刷新的替代方案,但我得到了相同的结果。任何想法为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

你能告诉我们为什么打电话刷新? TClientDataSet(CDS)通常不需要。

此外,打开CDS时SQLQuery是打开还是关闭?它必须关闭,以便DatasetProvider(DSP)打开它,检索所有行并将其关闭。

如果DSP发现数据集已经打开,它只会沿着记录导航,构建记录包(命名为数据)并将其发送到CDS。数据集将保持不变,白色关闭。