大数据库都支持commit这个sql语句,你在回滚后最好执行一下commit
如果没有commit,则你的回滚命令只是在内存中,(回滚段中而没有写入到数据文件,这时你新加当然要出错了)
Oracle好像是3秒自动写一次数据文件,如果你赶的不好,正好在3秒内写入我想出错是必然的。这个写入时间不是一定的,如果数据处理量比较大这个时间还可能增加的。
如果没有commit,则你的回滚命令只是在内存中,(回滚段中而没有写入到数据文件,这时你新加当然要出错了)
Oracle好像是3秒自动写一次数据文件,如果你赶的不好,正好在3秒内写入我想出错是必然的。这个写入时间不是一定的,如果数据处理量比较大这个时间还可能增加的。
你的办法不行,你指的是数据库的事务处理,我这里讲的是Ado的事务处理
如果dim cn as adodb.connection
....
cn.BeginTrans '事物开始
....
cn.CommitTrans '提交
....
cn.RollbackTrans '回滚如果RollbackTrans 后再CommitTrans,程序就出错了(实时错误,没有活动事务)数据库中的数据是被正常回滚了,但是Recordset中却不能识别被回滚的数据
如果重新open的话,也就把用户添加的数据给丢了是否能够把RecordSet在同步数据库前保存起来,失败后再赋值回去?
我用过这样的方法:dim adoRsTmp as adodb.recordsetset adoRsTmp = new adodb.recordset
set adoRsTmp.activeconnection = cn 'cn是adodb.connection对象
adoRsTmp.Open adoRs ' adoRs是实际的recordset对象,通过哦open方法使内存中保留两个RecordSet副本
set adoRsTmp.Activeconnection = nothing '我的设想是断开数据库连接,使adoRsTmp保持同步前状态事务回滚后:
set adoRs = adoRsTmp但实际上并备有起到我设想的效果,通过检查EditMode,发现adoRsTmp保持了AadoRs同样的状态,微软的数据感知技术似乎同步了adoRs和adoRsTmp,尽管我设置了adoRsTmp.Activeconnection = nothing。各位高手帮帮忙,给点意见!!
我想可不可以在保存前,将用户添加的数据保存在数组中,如果就一条数据也可以干脆把SQL语句保存下来,然后在重新打开数据库重新对数据库进行写操作啊!
你说两个ADORs同步了,那么一个内存中的数组不会和ADORs同步吧?
当然了以上是我片面的想法实际的实现可能有一些其他的困难,但是我想如果数据量不是上百做成数组存放起来还是可以的。
Connection对象没有location属性,如果你指的是CursorLocation的话,我现在用的正是client cusor