clientdateset 的 ApplyUpdates的问题

SaibeiStar 2010-11-16 03:51:21
Dmain.cdsC.First;
while not Dmain.cdsC.Eof do
begin
if (条件) then
begin
//其他操作
Dmain.cdsC.Delete;//删除在数据库中已经存在的记录
end
else
if (条件) then
begin
//其他操作
Dmain.cdsC.Next;
end;
end;
Dmain.cdsC.RecordCount;//记录数正确,为删除后的数据集的记录数,例如原来Dmain.cdsC有100条,删除20条,现在为80条

Dmain.cdsC.First;
while not Dmain.cdsC.Eof do //查看cdsC中确实已无主键重复的记录
begin
sID := Dmain.cdsC.FieldByName(ID).AsString;
Dmain.cdsC.Next;
end;

Dmain.cdsC.ApplyUpdates(0);//报错,提示不唯一,主键冲突

{ //以下语句可以执行,但实际插入到数据库中的记录为160条,为重复的80条,像是执行了两次ApplyUpdates
Dmain.Qrya.Close;
Dmain.Qrya.SQL.Clear;
Dmain.Qrya.SQL.text:='ALTER TABLE BZK_ZK_CARDINFO DISABLE CONSTRAINT CARD_INFO_KEY_YUANID';
Dmain.Qrya.ExecSQL(TRUE);
Dmain.Qrya.ApplyUpdates(0);
}
困惑中...,不知何解
...全文
172 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SaibeiStar 2010-11-18
  • 打赏
  • 举报
回复
Dmain.cdsC.ApplyUpdates(0);//报错,提示不唯一,主键冲突
这句报异常后,没有主键冲突的的记录竟然保存到了数据库中,有主键冲突的没有保存成功。
我的本意是异常后要提交的数据能够全部回滚,不提交,不用事物的话,设置在TDataSetProvider或TClientDataSet的属性能够实现吗?
SaibeiStar 2010-11-17
  • 打赏
  • 举报
回复
谢谢楼上,我的问题与你列的帖子不是一个问题

我的问题是数据集Qrya中为什么会出现重复的记录
软件钢琴师 2010-11-16
  • 打赏
  • 举报
回复

2,497

社区成员

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

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