clientDataSet内存表的Delta功能?

i54 2008-11-03 05:42:37
请教各位一个问题:用ClientDataSet建立一个内存表,保存好数据.对此内存表的修改,再用DELTA显示出来.
代码如下:
建内存表,并显示在DBGRID1上.
procedure CreateMTable;
var
mF:TFieldDef;
i:integer;
begin
try


self.ClientDataSet1.FieldDefs.Clear;
Mf:=self.ClientDataSet1.FieldDefs.AddFieldDef;
mf.Name:='MF';
mf.DataType:=ftString;
mf.Size:=10;


self.ClientDataSet1.CreateDataSet;

for i:=0 to 4 do
begin
ClientDataSet1.Append;
mClientDataSet.Fields[0].Value:='ABCD'+inttostr(i);
ClientDataSet1.post;
end;
DataSource1.DataSet:=ClientDataSet1;
DBGrid1.DataSource:=DataSource1;
except
exit;
end;
end;

把ClientDataSet1的DELTA付给ClientDataSet2,并显示在DBGrid上.
procedure TForm1.Button5Click(Sender: TObject);
begin
self.ClientDataSet2.Data:=self.ClientDataSet1.Delta;
DataSource2.DataSet:=ClientDataSet2;
self.DBGrid1.DataSource:=TDataSource2;
end;

运行,
在DBGride1改动一下,再执行Button5Click把DELTA付给ClientDataSet2,结果只是显示4行记录,并没有修改前后的对比记录,
请教各位代码哪里错了,或是自己建的内存表不扶持这个功能???
OK马上给分..在线等...
...全文
405 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangsp 2008-11-04
  • 打赏
  • 举报
回复
呵呵 再帮顶一个
CACACACACA 2008-11-04
  • 打赏
  • 举报
回复
新增完数据后.记得合并一个日志. 再在DBGrid中改数据. 再赋值delta就行了. 不合并日志. 改一万次还是没有你想到的结果的.
i54 2008-11-04
  • 打赏
  • 举报
回复
UP
i54 2008-11-04
  • 打赏
  • 举报
回复
TO:hongqi162
测试结果跟我的哪个是一样的.
并没有数据的修改前后对比.
i54 2008-11-04
  • 打赏
  • 举报
回复
多谢各位回复,我测试一下,OK马上给分.
yeah920 2008-11-04
  • 打赏
  • 举报
回复
不懂。帮顶。
hongqi162 2008-11-04
  • 打赏
  • 举报
回复

做了个测试,没发现有什么问题

procedure TFormMain.FormCreate(Sender: TObject);
begin
self.ClientDataSet1.FieldDefs.Add('Name',ftString,50);
self.ClientDataSet1.FieldDefs.Add('Age',ftString,50);
self.ClientDataSet1.CreateDataSet;

self.ClientDataSet1.AppendRecord(['100','100']);
self.ClientDataSet1.AppendRecord(['100','100']);
self.ClientDataSet1.AppendRecord(['100','100']);
self.ClientDataSet1.AppendRecord(['100','100']);
self.ClientDataSet1.AppendRecord(['100','100']);
self.ClientDataSet1.AppendRecord(['100','100']);
self.DataSource1.DataSet:=self.ClientDataSet1;
end;


procedure TFormMain.BitBtn1Click(Sender: TObject);
begin
self.ClientDataSet1.AppendRecord(['1001','100']);//添加新纪录
self.ClientDataSet2.Data:=self.ClientDataSet1.Delta;
self.DataSource1.DataSet:=self.ClientDataSet2;
end;
i54 2008-11-04
  • 打赏
  • 举报
回复
谢谢风归叶,搞定.结贴.
有回贴给5分,后面全给风归叶
CACACACACA 2008-11-03
  • 打赏
  • 举报
回复
呵.没看明白意思.前面的说错了.

结果只是显示4行记录,并没有修改前后的对比记录,

//--------
是这样.
对于ClientDataSet1来说, 新增的4条记录就是Delta的数据. 不管这4条记录你再来回的怎么更改. 都不会再更新Delta了. (也就是说Delta只有这新增的4条. 除非你再新增几个. 那么Delta就会再中几条.

CACACACACA 2008-11-03
  • 打赏
  • 举报
回复
直接把ClientDataSet1.delta给ClientDataSet2.Data就可以了. 不用其它的.
i54 2008-11-03
  • 打赏
  • 举报
回复
路过给分.....
i54 2008-11-03
  • 打赏
  • 举报
回复
UP

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧