帮忙看看,为什么正常提交后,数据库中却没有写入这个记录?在提交前还需要rst.Update语句吗?
Private Sub Command2_Click()On Error GoTo TransErr
cn.BeginTrans
rst.open "select * from 入库 ", cn, adOpenStatic, adLockOptimistic
rst.AddNew
i = MsgBox("添加商品吗?")
If i = vbNo Then Exit Sub
rst!商品ID = 101
rst!商品名称 = "大枣"
cn.CommitTrans
Exit Sub
TransErr:
MsgBox("发生错误了!")
cn.RollbackTrans
End Sub
--------------------编程问答-------------------- 是 --------------------编程问答-------------------- 需要。而且退出程序前最好要 rst.Close,写入磁盘文件。 --------------------编程问答-------------------- cn.CommitTrans没有rst.Update功能吗? --------------------编程问答-------------------- cn.CommitTrans 是开车到目的地,rst.Update 是上车。
你不上车只能等下一班车了(如果有的话)。 --------------------编程问答-------------------- 没有。两个完全不同的功能。Update 是更新数据库缓存。CommitTrans 是将已经发生的更新写入虚拟内存。当然,如果你没有 BeginTrans 的话,Update 就直接写虚拟内存了。反之,由于你没有 Update, 所以 CommitTrans 也就什么都没做。 --------------------编程问答-------------------- 在CommitTrans提交之后若发生错误,其提交前刚刚写入数据库的内容不会滚回。这时若执行滚回操作则引发一个未活动事务错误。是这样吗? --------------------编程问答-------------------- 其实你的问题加上 Update 就可以解决了。
我的理解是这样,你的 CommitTrans 提交的仅仅是没有 Update 的一个挂起的 Addnew 状态,包括你的字段赋值,仅此而已。
当然,你还有另一个选择,用 AdLockBatchOptimistic 锁打开记录集,用 UpdateBatch 批量更新。 --------------------编程问答-------------------- ADO数据对象在未执行Update,ADO数据对象仅将输入数据更新在内存由ADO数据对象建立的记录集上,执行Update后对数据表进行物理修改。
补充:VB , 基础类