我用vb编写一段读文件的代码(是把.data文件登录到表里)如果读的文件字段类型有错误让他们进到错误处理里写错误log,然后再读下一条,现在遇到的问题的是,如果.data文件只有一行是错误的,可以进到错误处理,如果有一行以上的错误数据,就不进到错误处理。请各位帮帮忙。部分代码如下。fno指的是文件    Do While Not EOF(fno)
        i = i + 1
        On Error GoTo updateerr
        gOraSession.DbBeginTrans        Line Input #fno, eiajdata
        a = Trim(Mid(eiajdata, 1, 5))
        b = Trim(Mid(eiajdata, 48, 12))
        c = Trim(Mid(eiajdata, 101, 10)) & "." & Trim(Mid(eiajdata, 111, 3))
        e = Trim(Mid(eiajdata, 224, 16))
        f = Trim(Mid(eiajdata, 271, 6))        On Error GoTo updateerrjyutyuu            sq = "insert into testTbl "
            sq = sq & "(no,a,b,c,d,e,f)"
            sq = sq & " values ( "
            sq = sq & "'" & i & "',"
            sq = sq & '" & a & "',"
            sq = sq & '" & b & "',"
            sq = sq & '" & c & "',"
            sq = sq & '" & d & "',"
            sq = sq & '" & e & "',"
            sq = sq & '" & f & "')"
            
            gOraDatabase.ExecuteSQL (sq)
        
'       正常Log
        readlog 1
        
        GoTo nxtupdateerrjyutyuu:
'       异常Log
        readlog -1
        GoTo nxt
updateerr:
'       异常Log
        readlog -2
nxt:
        gOraSession.DbCommitTrans
'        gOraSession.DbRollback
        I = I + 1
        DoEvents
    Loop上边是部分的代码,如果第一次有错误的话,可以从 gOraDatabase.ExecuteSQL (sq)跳到updateerrjyutyuu:处进行错误处理,当第二次出错的时候,直接抛出oracle内部的错误了,就进不到updateerrjyutyuu:这个地方了,请帮忙!

解决方案 »

  1.   

    这么跳来跳去你不晕吗?你该这么设计结构:
    on error resume next循环开始
    读入一行数据
    写入数据库
    判断错误是否发生(看错误号就可以)
    是就写LOG
    循环结束
      

  2.   

    错误处理完毕后,要用Resume, Resume Next或者Err.Clear语句清除错误信息
      

  3.   

    province_(雍昊) 老兄,事务控制怎么写
      

  4.   

    conn.begintrans
    操作数据库没有错误则生效
    conn.committrans反之则取消全部操作
    conn.rollbacktrans
      

  5.   

    这样不行啊,有异常的时候我要把Log写到表里的,走conn.rollbacktrans就登录不到表里了
      

  6.   

    在写数据库的时候出现异常后,还能够gOraSession.DbCommitTrans吗??
    updateerrjyutyuu:   (在写数据库后的错误处理.....)
    '       异常Log
            readlog -1
            GoTo nxt
    nxt:
            gOraSession.DbCommitTrans     ????
            I = I + 1
            DoEvents
        Loop
      

  7.   

    那你把写错误记录的操作放ROLLBACK后面吧