以下是我的一段数据库载入程序,功能是在主程序显示前先出现“打开”对话框,让用户定位数据库文件的位置,如果选择的数据库文件不存在,则由程序提示出错并可重新选择,此程序运行时第一次可弹出“打开”对话框并选择一个不存在的文件,则会提示我自定义的错误提示并重新选择,但若再次选择错误文件并打开时则不能显示我定义的错误提示??只出现VB的系统错误提示??而我又不想用VB的错误提示!!是on error goto语句用错了吗??请高手指点迷津!!谢谢sub main()
'定位数据库位置
Dim CDopen As CommonDialog
Set CDopen = Form1.CD
CDopen.DialogTitle = "定位数据库位置"
CDopen.Filter = "数据库 (*.db)| *.db|"
CDopen.InitDir = App.Path
dd:
On Error Resume Next
CDopen.CancelError = True
CDopen.ShowOpen
If Err.Number = 32755 Then'若点击“取消”则退出
    Set CDopen = Nothing
    End '终止程序运行
Else
    strDBpath = CDopen.FileName
    On Error GoTo openerror
    Dim conns As New ADODB.Connection
    conns.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBpath
    Set CDopen = Nothing
    conns.Close
    Form1.Show '显示出程序主窗体
    Exit Sub
openerror:'若数据文件不存在则提示错误
    MsgBox "数据库文件:" & CDopen.FileName & Chr(13) & Chr(13) & "找不到!", vbOKOnly + vbExclamation, "数据库错误"
    GoTo dd'重新选择
    End If
End Sub

解决方案 »

  1.   

    On Error Resume Next的问题,使用它后, 当conns.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBpath这句出现错误时,并没有跳到你想要的openerror:去执行,而是继续执行了
    Set CDopen = Nothing
    conns.Close
    Form1.Show '显示出程序主窗体
    Exit Sub
      

  2.   

    sub main()
    '定位数据库位置
    Dim CDopen As CommonDialog
    Set CDopen = Form1.CD
    CDopen.DialogTitle = "定位数据库位置"
    CDopen.Filter = "数据库 (*.db)| *.db|"
    CDopen.InitDir = App.Path
    dd:
    On Error Resume Next
    CDopen.CancelError = True
    CDopen.ShowOpen
    If Err.Number = 32755 Then'若点击“取消”则退出
        Set CDopen = Nothing
        End '终止程序运行
    Else
        strDBpath = CDopen.FileName
        Dim conns As New ADODB.Connection
        conns.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBpath
        Set CDopen = Nothing
        conns.Close
        If Err.Number <> 0 Then
            Err.Clear
            MsgBox "数据库文件:" & CDopen.FileName & Chr(13) & Chr(13) & "找不到!", vbOKOnly + vbExclamation, "数据库错误"
            GoTo dd'重新选择
        else
            Form1.Show '显示出程序主窗体
        End If
    end if
    End Sub
      

  3.   

    On Error Resume Next
    忽略异常,转到下一条语句
      

  4.   

    tztz520(午夜逛街) :你的代码是死循环,不能正确显示错误消息????
     viena(维也纳nn-实心木头人) :使用On Error Resume Next是为了判断是否按下取消,如果修改我的程序啊??
    在线等!!!
      

  5.   

    songyaowu(不以分多而蹭之;不以分少而不答;习惯不结贴者拒:
    如果是On Error Resume Next的问题,为什么第一次可以显示错误提示,第二次就不行呢?
      

  6.   

    sub main()
    '定位数据库位置
    Dim CDopen As CommonDialog
    Set CDopen = Form1.CD
    CDopen.DialogTitle = "定位数据库位置"
    CDopen.Filter = "数据库 (*.db)| *.db|"
    CDopen.InitDir = App.Path
    dd:
    On Error Resume Next
    CDopen.CancelError = True
    CDopen.ShowOpen
    If Err.Number = 32755 Then'若点击“取消”则退出
        Set CDopen = Nothing
        End '终止程序运行
    Else
        strDBpath = CDopen.FileName
        Dim conns As New ADODB.Connection
        conns.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBpath
        conns.Close
        If Err.Number <> 0 Then
            Err.Clear
            MsgBox "数据库文件:" & CDopen.FileName & Chr(13) & Chr(13) & "找不到!", vbOKOnly + vbExclamation, "数据库错误"
            GoTo dd'重新选择
        else
            Set CDopen = Nothing
            Form1.Show '显示出程序主窗体
        End If
    end if
    End Sub
      

  7.   

    回复人: xiaott(我能睡觉吗) ( ) 信誉:100  2005-01-28 15:40:00  得分: 0  
     
     
       tztz520(午夜逛街) :你的代码是死循环,不能正确显示错误消息????
     viena(维也纳nn-实心木头人) :使用On Error Resume Next是为了判断是否按下取消,如果修改我的程序啊??
    在线等!!!
      \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    如果取消了,肯定没有路径返回,长度就是0 啊
     
      

  8.   

    Sub main()
        Dim conns As New ADODB.Connection
        Dim CDopen As CommonDialog
        Set CDopen = Form1.CD
        CDopen.DialogTitle = "定位数据库位置"
        CDopen.Filter = "数据库 (*.db)| *.db|"
        CDopen.InitDir = App.Path
        CDopen.CancelError = True
        On Error GoTo openerror
        CDopen.ShowOpen
        strDBpath = CDopen.FileName
        conns.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBpath
        Set CDopen = Nothing
        conns.Close
        Form1.Show '显示出程序主窗体    Exit Subopenerror:                                                                                     '若数据文件不存在则提示错误
        If Err.Number = 32755 Then
            Set CDopen = Nothing
            End '终止程序运行
        Else
            MsgBox "数据库文件:" & CDopen.FileName & Chr(13) & Chr(13) & "找不到!", vbOKOnly + vbExclamation, "数据库错误"
            main
        End If
    End Sub
      

  9.   

    CDopen.flags = cdlOFNFileMustExist
    就不用自己处理文件不存在的情况