ADO 在用BatchUpdata模式时,如果记录的主键重复,向数据库更新时出错,ADODATASET不能返回到UpdataBatch之前的状态,各位有没有解决

  • 主题发起人 主题发起人 newfat
  • 开始时间 开始时间
N

newfat

Unregistered / Unconfirmed
GUEST, unregistred user!
ADO 在用BatchUpdata模式时,如果记录的主键重复,向数据库更新时出错,ADODATASET不能返回到UpdataBatch之前的状态,各位有没有解决办法,另,Oracle提供的ADO驱动有没有下载地址?(100分)<br />ADO 在用BatchUpdata模式时,如果记录的主键重复,
调用UpdataBatch向数据库更新时出错,ADODATASET不能返回到UpdataBatch之前的状态,
具体为。在客户端添加二记录,表的主键为ID,这是地ID重复
ID ,NAME
A:1,1
B:1,2
它们的UpdateStatus 都是usInserted
但调用UpdataBatch向数据库更新时出错后,
它们的UpdateStatus为
A:usUnmodified
B:usInserted
有没有办法回复到调用UpdataBatch之前的状态?
我已经加了事务控制,出错之后也RollbackTrans了
各位有没有解决办法?

另,Oracle提供的ADO驱动有没有下载地址?
 
是不是你事务没用对?
 
ADOConnection1.BeginTrans;
try
ADODataSet2.UpdateBatch;
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
end;
我事务是这么用的,没错吧
 
Note:
To use batch updating, the CursorType property of the dataset component
must be either ctKeySet (the default) or ctStatic and the LockType property
must be ltBatchOptimistic.
都设置了吗?
 
设了,都设了,我说了是BatchUpdata模式了,是按李维的书说的作的,不过不是三层是二层
 
不可以,因为在UpdateBatch之前,系统回默认调用Post,
这样就不能返回到以前的状态了,我刚做的项目也想实现这样的功能,
可是没有成功
 
那可怎么办呀,我们老板指定要用ADO,本来以前BDE用的好好的,还听说ADO连Oracle有问题,是不是呀
 
to qianwt:
你说你们也有这个功能,那你们是如何实现的,请赐教:-)
 
ADO驱动可以从http://otn.oracle.com/software/content.html下载
 
to 徐凤华:
老兄,我没有帐户和密码呀,有没有别的地方有呀。
 
to newfat:
>>>>>来自:qianwt, 时间:2002-12-5 10:42:00, ID:1487230 | 编辑
>>>>>不可以,因为在UpdateBatch之前,系统回默认调用Post,
>>>>>这样就不能返回到以前的状态了,我刚做的项目也想实现这样的功能,
>>>>>[red]可是没有成功[/red]
 
to qianwt:
啊,啊,那你们就没做下去,没有用BatchUpdata模式吗?还是有其它的解决办法?
 
你把以上的代码写在哪里呀?

我用是没问题的哟!
 
to jianguo_bu:
请看问题,是添加了二条主键重复的记录造成的错误,之后出现的问题
 
这样试试
ADOConnection1.BeginTrans;
try
ADODataSet2.UpdateBatch;
ADOConnection1.CommitTrans;
except
ADOConnection1.RollbackTrans;
raise;
end;
 
to seafox:
不是没有错误,而是出错后不能回到原来的状态,请看题目
 
to newfat:
我们用的是主从表,因为主表还没有保存,保存是根据主表是否在修改状态来
判断的,所以只是字表的状态是浏览状态,不影响其它的问题
 
to qianwt:
那你们从表的更新是由手动写的嵌入SQL来做了喽,不是由ADO自动生成的SQL更新的吧
 
回不到原来状态的,你只能自己事先检查有可能的错误(比如先检查是否有主键重复),
排除这些错误条件后,再updatebatch

用事务只能回滚数据
 
to newfat
是呀!我试了没问题你,且我们一直是这样用的呀!

你的这段代码是不是放在保存按钮里呢?

注意:放post事件里是没用的。

还有我可以把我的测试代码给你。
 
后退
顶部