(**问题没有解决,重新发贴. 总结前贴的测试结果)** 关于ADO 主从表的UpdateCatch (批量更新) 问题,请高人指教?

yimten968 2005-02-28 10:20:23
(**问题没有解决,重新发贴. 总结前贴的测试结果)** 解决后一起结贴
** 关于ADO 主从表的UpdateCatch (批量更新) 问题,请高人指教?

初始: 主表 SA LockType = ltBatchOptimistic , CacheSize =1000
从表 SA_ITEM LockType = ltBatchOptimistic, CacheSize = 1000

当新增时 (SA.Append)

SA 明细输完后,输入多笔SA_ITEM
当 SA_ITEM (not noll) 字段都输完,保存正常.
例如 (1)
A B C
**********************
1 1 a
2 2 3
**********************
(表1)
假如字段C 为(not NULL) 把以上数据改成如下
A B C
****************
1 1 a
2 2
******************
表 (2)
其中 字段C第二条记录为空,我点保存,提示错误信息(正常,因为字段C第条字段值为空)
然后我把字段C 第二条记录补上,跟(表1)数据一样,
或把第二条记录删除(sa_item.delete )
保存时还是提示错信息.
出错信息
" 出错:找不到要更新的列,最后读取的值被变更 "


我的保存代码是:
sa_item.FieldByName('f_s_no').Asinteger=1;
Try
AdoConnection1.BeginTrans; // 事务开始
sa.UpdateBatch();
sa_item.UpdateBatch();
DMData.ADOConnection1.CommitTrans; // 提交
Except
// XXSingle(水连天【盘古传说】) 指点
on e:except do
begin
Application.message(pchar('原因:'+e.message),'错误',MB_ICONERROR)
AdoConnection1.RollbackTrans; // 回滚
end;
End;

请指点这是为什么,应该怎么处理?
...全文
206 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yimten968 2005-03-03
  • 打赏
  • 举报
回复
XXSingle(水连天【盘古传说】)
错了一次后游标就会失效,ADO里边经常碰到,很多情况下都是要ADOConnection.close处理



这应该就是问题的原因了,ADOConnection.Close 会把先前输入的数据(还未保存成功的数据)清楚,
跟大家商讨一下解决的办法.
1) . 把输入的数据保存在一临时表中,出错后,ADOConnection.Close 再把数据从临时表返回. 感觉这样来回的操作数据,增加了系统开销.
以上是我个人的一个解决办法,还有没有更好的解决办法(前提还是用ADO)
yimten968 2005-03-01
  • 打赏
  • 举报
回复
cdsgajxlp(起名很难) 你好!

用insert,update ,当我修改从表(sa_item)时,有作新增,删除,修改动作,再保存.
那怎么判断哪条记录是被修改,哪条记录是被删除了.
cdsgajxlp 2005-03-01
  • 打赏
  • 举报
回复
我想这个应该是数据库报出来的,你直接写成SQL的INSERT,UPDATE调试不是更好
nv95 2005-03-01
  • 打赏
  • 举报
回复

sa_item.UpdateBatch();

sa.UpdateBatch();

行不行
cdsgajxlp 2005-03-01
  • 打赏
  • 举报
回复
up
yimten968 2005-02-28
  • 打赏
  • 举报
回复
on e:exception do
begin
Application.message(pchar('原因:'+e.message),'错误',MB_ICONERROR)
AdoConnection1.RollbackTrans; // 回滚
end;

出错信息
" 原因:找不到要更新的列,最后读取的值被变更 "

XXSingle 2005-02-28
  • 打赏
  • 举报
回复
晕,没写完全,补
on e:exception do
begin
Application.message(pchar('原因:'+e.message),'错误',MB_ICONERROR)
AdoConnection1.RollbackTrans; // 回滚
end;


拦截异常处理的出错信息,e.message显示的内容就是错误原因,把它贴出来给大家看看
cdsgajxlp 2005-02-28
  • 打赏
  • 举报
回复
up

2,497

社区成员

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

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