CONN.BEGINTRANSSQL1="INSERT INTO 表1....."
CONN.EXECTUTE SQL1SQL2="UPDATE 表2....."
CONN.EXECTUTE SQL2 CONN.COMMITTRANS事务控制的注意事项中说:如果脚本有错误,事务也将执行。那我如何能在CONN.EXECTUTE SQL1和CONN.EXECTUTE SQL2执行完后,判断其有没有正确执行,以便于是采取提交还是ROOLBACK.

解决方案 »

  1.   

    利用错误处理机制来做CONN.BEGINTRANSSQL1="INSERT INTO 表1....."
    CONN.EXECTUTE SQL1SQL2="UPDATE 表2....."
    CONN.EXECTUTE SQL2  CONN.COMMITTRANS
    exit sub
    errHandle:
    这里ROOLBACK
      

  2.   

    Dim iCtr,jCtr as integer
    CONN.BEGINTRANSSQL1="INSERT INTO 表1....."
    CONN.EXECTUTE SQL1,iCtrSQL2="UPDATE 表2....."
    CONN.EXECTUTE SQL2,jCtr
    if iCTR<>0 and jCtr<>0 then  '判断是否影响插入与更新的数据
        CONN.COMMITTRANS
    else
        CONN.RollbackTrans
    end if
      

  3.   

    '利用错误处理机制来做
    Private Sub sub_test()    Dim conn As New ADODB.Connection
        
        On Error GoTo errHandle
        
        conn.BEGINTRANS
        
        SQL1 = "INSERT INTO 表1....."
        conn.EXECTUTE SQL1
        
        SQL2 = "UPDATE 表2....."
        conn.EXECTUTE SQL2
        
        conn.COMMITTRANS
        
        Exit Sub
    errHandle:
        conn.RollbackTrans
        
    End Sub
      

  4.   


    有一位朋友说,INSERT INTO不返回这个值,也不返回记录集,如果他的说法是正确的,那这个 iCTR<>0 就没法用来判断这个INSERT INTO语句有没有正确执行。关键是这个说法到底是对还是不对。
      

  5.   

    insert、update等数据修改命令均会返回受影响记录数的。
      

  6.   

    CONN.BeginTrans
    CONN.Execute Sql
    If CBool(Cnn.State And adStateExecuting) Then
        Cnn.Cancel
        Cnn.RollbackTrans
    Else
        Cnn.CommitTrans
    End If
    既然是一次执行,不如写到一起
    CONN.BeginTrans
    SQL1 = "INSERT INTO 表1....."
    SQL1 = SQL1 & ";update 表2....."
    CONN.EXECTUTE SQL1
    '……
    CONN.CommitTrans
      

  7.   

    在事务提交语句后面用 select @@ROWCOUNT 返回 @@ROWCOUNT,根据返回值确定事务是否正确执行.
      

  8.   

    if adodc1.recordset.count>0 them
    sql="insert into ..."
    cnn.EXECTUTE sql
    end if这样保证有数据才插