当前位置:编程学习 > VB >>

帮忙看看,为什么正常提交后,数据库中却没有写入这个记录?在提交前还需要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 ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,