(**问题没有解决,重新发贴. 总结前贴的测试结果)** 解决后一起结贴
** 关于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;
请指点这是为什么,应该怎么处理?
** 关于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;
请指点这是为什么,应该怎么处理?
on e:exception do
begin
Application.message(pchar('原因:'+e.message),'错误',MB_ICONERROR)
AdoConnection1.RollbackTrans; // 回滚
end;
拦截异常处理的出错信息,e.message显示的内容就是错误原因,把它贴出来给大家看看
begin
Application.message(pchar('原因:'+e.message),'错误',MB_ICONERROR)
AdoConnection1.RollbackTrans; // 回滚
end;出错信息
" 原因:找不到要更新的列,最后读取的值被变更 "
那怎么判断哪条记录是被修改,哪条记录是被删除了.
sa_item.UpdateBatch();
后
sa.UpdateBatch();
行不行
错了一次后游标就会失效,ADO里边经常碰到,很多情况下都是要ADOConnection.close处理这应该就是问题的原因了,ADOConnection.Close 会把先前输入的数据(还未保存成功的数据)清楚,
跟大家商讨一下解决的办法.
1) . 把输入的数据保存在一临时表中,出错后,ADOConnection.Close 再把数据从临时表返回. 感觉这样来回的操作数据,增加了系统开销.
以上是我个人的一个解决办法,还有没有更好的解决办法(前提还是用ADO)