我在一个过程中使用了一个on error goto aaa 但是我有一句产生了实时错误“94”,使用null无效,然后为什么,应该说它出现了这个错误后应该跳到aaa的语句啊,为什么它还是在那个语句提示这个错误呢。谢谢!!!!

解决方案 »

  1.   

    你用on error goto ....后面有没有包含了你自己写的函数?如果是该函数内部出错的话会有提示的。
      

  2.   

    在VBIDE中,打开 “工具” -> “选项”,选择“通用”页。然后看看错误捕获这块你是不是选择了“发生错误时中断”,如果是的话就选个其他的
      

  3.   

    这就是代码,楼上说的我看了,选的是在模块内中断
    Private Sub Command3_Click()
      On Error GoTo Flag        '出现null错误后处理
      Dim i, n As Double
      Dim j As Double
      Dim Str1, Str2, Str3, Str5, Str6, Str7 As String
      Set DataB2 = OpenDatabase(App.Path & "\xxxxx.mdb")
      Set RecordS2 = DataB2.OpenRecordset("aaaaa")
      j = 0
    Second:
      With RecordS2
        i = .RecordCount
        .MoveFirst
        Text1.Text = i
        If j >= i - 19 Or i = j Or i <= 1 Then         '执行到记录结尾退出软件
          .Close
          DataB2.Close                                 '关闭数据库
          msg = MsgBox("数据已经删除完毕!!!")
          Exit Sub
        End If
        
        If j <> 0 Then
          For n = 1 To j
            .MoveNext
          Next
        End If
        
        Str1 = .Fields(1)
        Str2 = .Fields(2)
        Str3 = .Fields(5)             ‘因为这个字段经常出现空。提示 错误的地方
        
        If i > 0 Then
          For n = 0 To i - (j + 20)
            .MoveNext
            If Len(Trim(.Fields(5))) = 0 Then .Delete: GoTo Flag1
                    
            Str5 = .Fields(1)
            Str6 = .Fields(2)
            Str7 = .Fields(5)
            
            If Str1 = Str5 And Str2 = Str6 And Str3 = Str7 Then
              .Delete
            End If
    Flag:                    'flag标志
            If Err.Number = 94 Then
              .Delete
            End If
    Flag1:      Next
        End If
        
        j = j + 1
        .MoveFirst
        GoTo Second
      End With
    End Sub
    谢谢!!!!!!!!!!!!!!!!!!!!指导!!!!!!!!!!!!!!
      

  4.   

    我没细看,就看了最后错误提示的地方
    Flag:                    'flag标志
            If Err.Number = 94 Then
              .Delete
            End If这段错误处理代码通常应该放到 sub 的最后,并且在  FLAG  上面添加  exit sub  你居然在循环里面加这个代码总的来说这代码写的惨不忍睹楼主你写了多久代码了
      

  5.   

    If Err.Number = 94 Then
              .Delete
            End If
    ==>
            If Err.Number = 94 Then
              .Delete
              Resume Flag1
            End If
      

  6.   

    天!看着不太好哦 豆子的可以为你解决!
    Flag:                    'flag标志
            If Err.Number = 94 Then
              .Delete
              Resume Flag1
            End If
    Flag1:
      

  7.   

    楼主你者代码写得...强烈建议你不要用goto.我看这是在是头都大了,你完全可以用on error resume next 或者直接 在程序中用isnull判断.Fields(5)是否为空,然后再作相应的处理 阿
      

  8.   

    在读取数据库的记录时经常会遇到NULL的错误,这里给出一个非常简单的解决方法,可以避免在任何类型的数据库的读取时NULL的问题:假设字段内容为文本格式:
    dim AA as String
    ...
    AA = RecordSet.Fields(N) & ""
    ...
    假设字段内容为数字格式:
    DimAA as Double
    ...
    AA = Val( RecordSet.Fields(N) & "" )
    ...同样的道理,在将记录写进数据库的时候也会发生NULL的问题,比如一个没有初始化的变量直接写入字段就会发生同样的错误。
    解决的方法相同:
    假设字段内容为文本格式:
    dim AA as String
    ...
    RecordSet.Fields(N) = AA & ""
    ...
    假设字段内容为数字格式:
    DimAA as Double
    ...
    RecordSet.Fields(N) = Val( AA & "" )
    ...希望对楼主有所帮助。另外,看了楼主的程序,对于楼主在程序中GOTO满天飞的做法不是很赞同。
    因为完全可以使用同一个ON ERROR来解决,之需要在错误处理中使用:
    Flag:
    Select case Err.Number
       case XXX:
       case XXX:
       ...
    end select
    按照不同的错误号,就可以对不同错误区别处理了。
      

  9.   

    我上面的程序是要在几万条的记录中查找完全相同的记录进行删除,但是运行程序时cpu占用率100%,我该如何用代码实现让cpu占用率降下来,时间可以长些谢谢解决了重新开贴给你们分
      

  10.   

    你用查询语句删不行么?
    delete from xxx where yyy=zzz
      

  11.   

    一会给大家重新开贴给分,再发100分。。我在线等大家回答,谢谢
    还有个问题,我acess数据库里有个表,我用代码打开这个表后用***.RecordCount来统计有多少条记录,为什么会出现记录条数不一致呢,统计出来的比实际的多了18条,这是为什么,如何准确统计呢谢谢。
      

  12.   

    打开数据记录后先用RECORDSET.MOVELAST方法,将指针移动到最后一条记录再使用RecordCount属性才能获取正确的记录数量
      

  13.   

    给你个思路,在sql server或者 oracle中可以直接通过一句sql把重复的记录删掉,access好像不行,所以你可以用select distinc 把不重复的纪录选出插入临时表中,然后把原表删掉,在导入就可以了,应该比你这种方式快得多
      

  14.   

    要操作数据库还是来学pb吧,vb操作数据库多麻烦啊,反正你也是初学,改道吧!!
      

  15.   

    Private Sub Command3_Click()
      On Error GoTo Flag        '出现null错误后处理  '这里写执行代码
      '......
      Str3 = .Fields(5) & ""             '这样可以避免 Null 错误
      '......Flag:                    'flag标志
      If Err.Number = 94 Then
         .Delete
         Resume Next            '这样可以回到原来的流程
      End If
      MsgBox Err.Number & ": " & Err.Description, "Runtime Error"
    End Sub
      

  16.   

    删除重复记录的一种方法:
    Set DataB2 = OpenDatabase(App.Path & "\xxxxx.mdb")
    '首先删除有 Null 值的记录 
    DataB2.Execute "Delete From aaaaa Where field5 Is Null"
    '提取不重复的记录,至一临时表
    DataB2.Execute "Select * Into Temp From aaaaa Group By Field1,Field2,Field5"
    '清空原表
    DataB2.Execute "Delete From aaaaa"
    '写回提取的记录
    DataB2.Execute "Insert Into aaaaa Select * From Temp"
    '删除临时表
    DataB2.Execute "Drop Table Temp"
    DataB2.Close