在ClientDataSet.Delta的修改行里如何知道修改的了哪些列和key(主键)

yhcustc 2007-11-01 01:15:33
在ClientDataSet.Delta的修改行里如何知道修改的了哪些列和key(主键),以便生成sql语句或者调用存储过程
通过用temp_cds.data := cds.Delta可以知道所操作的数据集,
当 cds.data 一行数据发生改变,那么 cds.Delta就会两行数据产生(一行是原始数据,另行就是所修改后的值),

temp_cds.data := cds.Delta;
while not temp_cds.eof do
Begin
if (temp_cds.updateStatus = usModified) then
Begin
ShowMessage('该行数据是修改过的,但是我怎样知道哪些列被修改了?');
end;
if (temp_cds.updateStatus IN [usInserted, usDeleted]) then
Begin
ShowMessage('新增、删除的行号处理。');
end;
end;
...全文
541 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhcustc 2007-11-12
  • 打赏
  • 举报
回复
up
yhcustc 2007-11-06
  • 打赏
  • 举报
回复
其实我要的功能,使能在表格输入多行,删除多行一次保存,在保存循环表格的操作行,如果是新增行就调用自己的新增存储过程,修改的行调用自己修改存储过程,删除行就调用自己的删除存储过程。

希望您看到能给出合理的解决方法
不知道谁用StringGrid对数据操作过?
qindj 2007-11-05
  • 打赏
  • 举报
回复
有一个OwnerData的,你可以搜一下看看
yhcustc 2007-11-05
  • 打赏
  • 举报
回复
不好意识,我要的不是用ClientDataSet.applyupdate,我是想通过调用自己的存储过程来增删改。由于对一张表插入记录时可能对多张修改,所以要用自己的存储过程。
ideation_shang 2007-11-04
  • 打赏
  • 举报
回复
很明显,要截获delta变化,然后把变化保存,再在其他地方解开,处理。呵呵~
qindj 2007-11-04
  • 打赏
  • 举报
回复
如果你要更新数据库的话,直接调用ClientDataSet.applyupdate,就可以了
火星牛 2007-11-02
  • 打赏
  • 举报
回复
if not Fields[i].IsNull就是修改过的,Fields[i].NewValue是修改后的,Fields[i].OldValue是修改前的。
所以Midas这里有个问题,就是如果你把资料从非NUll修改为NUll不会被认为没有修改。因此系统应用时,要把Null理解为一种不可恢复的初始状态,一旦变成非Null,就不能再改成Null,要留下痕迹,如改成0会空字符串。
yhcustc 2007-11-02
  • 打赏
  • 举报
回复
这是我设计的界面

运行后的界面

请问我修改了两行的数据,怎么知道我修改几列,如何生编辑成一个 update table_name set field1= ????? where key = ????
问号就是很难知道的
yhcustc 2007-11-01
  • 打赏
  • 举报
回复
在ClientDataSet.Delta的修改行里如何知道修改的了哪些列和key(主键),以便生成sql语句或者调用存储过程
通过用temp_cds.data := cds.Delta可以知道所操作的数据集,
当 cds.data 一行数据发生改变,那么 cds.Delta就会两行数据产生(一行是原始数据,另行就是所修改后的值),

temp_cds.data := cds.Delta;
while not temp_cds.eof do
Begin
if (temp_cds.updateStatus = usModified) then
Begin
ShowMessage( 该行数据是修改过的,但是我怎样知道哪些列被修改了?);
end;
if (temp_cds.updateStatus IN [usInserted, usDeleted]) then
Begin
ShowMessage( 新增、删除的行容易处理。 );
end;
end;
yhcustc 2007-11-01
  • 打赏
  • 举报
回复
自己顶一下

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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