写一个往数据库里添加数据的程序,因为该程序要求要么不更新,要么全更新,所以想用rollback,可是试了一下,好像不行,我是用ado访问的,是不是不能rollback阿?那怎么办?还有就是添加完后希望更新一下数据库,该怎么办
On Error GoTo err
Call openconn
begintrans
sqlstr = "SELECT * FROM test_report"
Call adors(sqlstr)rs.AddNew
rs.Fields("report_number") = no.Text
rs.Fields("supplier_name") = supplier_nam.Text
rs.Update
CommitTrans
MsgBox "test report saved successfully", vbInformation
err:
Rollback
MsgBox err.Description

解决方案 »

  1.   

    conn.begintrans
    conn.committrans
    conn.rollback
      

  2.   

    我现在的程序已经不用rs.update这种形式了,觉得虽然方便,但是却不好控制,比如更新不成功时,一定要进行相应的处理。否则状态会乱的。所以我现在修改都是直接写sql语句,虽然麻烦些,但以后维护起来却方便。
    我只是我的看法,可能不对。呵。
      

  3.   

    RecordSet就是楼上说的RS,也可以用组装的SQL语句更新的。
    例如 rs.open "update Table set col1='TEST'" ,conn,3组装的SQL语句容易受SQL注入攻击,而RS!Col1='TEST' ; RS.Update 这种方式可以避免了注入攻击。
      

  4.   

    首先事务是connection发起的,
    你单单写个begintrans、CommitTrans、Rollback,
    除非这也是你的函数,否则难得你的程序不会报错么?其次在err:前面应该加上exit sub(或者function)
      

  5.   

    事务是定义在连接上的
    dim Conn as Adodb.Connection
    set Conn=new Adodb.Connection
    conn.open "连接字符串"
    conn.begintrans
    conn.execute "Update test_report set report_number=" & no.text & ",supplier_name='" & supplier_nam.Text & "', , adCmdText
    conn.committrans
    exit sub
    errcl:conn.rollback