ADO老问题,无法更新行集定位(200分)

  • 主题发起人 主题发起人 savetime
  • 开始时间 开始时间
S

savetime

Unregistered / Unconfirmed
GUEST, unregistred user!
ADO + ACCESS2000
主表用普通模式
细表用缓存更新模式

保存用一个按钮
保存按钮ONCLICK中首先开启一事务
如果主细表被修改则POST和BATCHUPDATE,出现错误则回滚
出现错误时,这时再修改细表,再保存则出现无法更新行集定位

自增字段已设置好,没有重复的记录。
请问是何原因?
 
究竟是什么错误?没有看出来。
是否是当主表错误时,细表也添加不料数据?这正常啊,你在定义表的时候有约束吧。
 
如果还是D5并没有打补丁的话就先补丁,然后,
定义了表的主键没有? ADO操作如果没定义表主键,
对一条产生的更新语句会涉及多条记录或找不到记录的情况出现,
 
补充一下:
主细表中没有使用VCL中的设置关联,细表内容是临时查出来的。
 
去掉数据库中所有字段的缺省值。
 
没有字段设置默认值。
 
你说的主表,细表是什么关系?是设置了关联的主从表吗?
 
to weichao9999,
主表,细表没有设置关联,细表是在主表 Scroll 时重新刷出的。

我现在大概知道了原因。

保存过程是:

开启事务;
主表.Post;
细表.BatchUpdate;
其它检测函数;
如果其它检测函数返回错误,则RollBack,否则Commit;

如果在其它检测函数出错 RollBack 后,细表行在数据库中对应行便不存在。
于是出错。而其它检测函数必须细表更新到数据库中才能执行。

我正在想怎样解决这个问题。谁有好方案请提出。
 
根本解决的方法(只是不知道你们是否接受)
当数据集编辑或新增完成后,克隆此数据集,并且使用克隆数据集更新。
提交成功,将克隆数据集反克隆回去!
呵呵~~~~~~~~~
 
to tingliuxingyu,
天哪!希特勒再世!希望你再来点拿破仑的风格。
 
我也碰到过类似情况,加个主键试试
 
是因为自增字段已设置好不能与原有字段同时提交!
 
主表.Post;放到事务外面好了!
细表.onnewrecord;
begin
if 主表.status=dsedit then 主表.post
end;
 
>>主表.Post;放到事务外面好了!
不行啊,细表出错主表当然不能保存?
 
我用ADO的时候一般都是先保存主表!在确定保存了主表的情况下再保存明细表!主表的保存和
明细表不在一个事务内!这样也很好“理解”啊!--明细表出错!主表保存和它没有关系呀!干
嘛要“回滚”?错了只要重输明细就可以了!主表又不用重输!也不会被清掉明细!

我不知道为什么那么多人用ADO!反正我喜欢BDE!BDE能达到你的要求而且速度很快!
ADO总以为自己“聪明”留给用户的余地太小!一点都不“人性化”!也没有TUPDATESQL!很可笑的!
 
你现在这么用ADO的话是达不到你的期望值的!
 
自增字段不要加到Dataset的Fields里﹐你試試.
因為﹐如果你是新增時﹐前台新增一筆記錄時自增字段在前台是沒有值的,所以當您更新
時會時現行定位錯誤.
 
我只能承认,tingliuxingyu是真正解决我的问题。而且想必给大家更多启示。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部