使用adoquery批量更新一个表,结果无法提交到数据库。

HelpMeNow 2010-06-22 05:54:45
想对表中的主键gxid做一个批量更新,结果提示gxid重复,无法保存

qDetail是adoquery,locktype是ltBatchOptimistic
我做了一个批量更新的动作,保存出错。
try
while not qDetail.Eof do
begin
qDetail.Edit;
qDetail.FieldByName('gxId').AsInteger := i + 1;
i := i + 1;
qDetail.Next;
end;
finally
end;


请问是怎么回事。
...全文
175 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
HelpMeNow 2010-06-23
  • 打赏
  • 举报
回复
在qDetail中,查不出重复的东西,就是更新到后台数据库时提示出错。
SQLDebug_Fan 2010-06-23
  • 打赏
  • 举报
回复
都告诉你原因了,你去检查一下主键是不是重复就可以了
HelpMeNow 2010-06-23
  • 打赏
  • 举报
回复
楼上说的办法都不行。请问高手这种问题,应该怎么操作呢。
林石公 2010-06-23
  • 打赏
  • 举报
回复
不是已经提示你重复了么,应当就是主键问题,
你可以先last,然后prior的方式试试主键+1,
不过动主键总不是个办法
SQLDebug_Fan 2010-06-23
  • 打赏
  • 举报
回复
检查一下是否主键重复了?
HelpMeNow 2010-06-23
  • 打赏
  • 举报
回复
还是不行,不知道和本身是主键有没有关系。
ron_xin 2010-06-23
  • 打赏
  • 举报
回复
你可以给I一个初始值(相当于前缀),然后更新,更新完后,再给I一个初始值(要更新的值),这样就实现了批量更新,否则会因为主键冲突而失败

with qDetail do
begin
first;//移到首行,如果当前行开始删除该语句
i:=12345;
while not Eof do
begin
Edit;
qDetail.FieldByName('gxId').AsInteger := i + 1;
i := i + 1;
Next;
end;
end;
hsmserver 2010-06-22
  • 打赏
  • 举报
回复
Edit后Post;

1,593

社区成员

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

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