'在VB一模块中写了如下代码
'经过实践,代码可用
'你有更好更简练的代码吗?分享一下~~~~~~~~~~~~~~
'我的代码中需要改进的地方有哪些?
'特别是On Error Resume Next这句,位置和用法对吗?会不会带来什么后患?
'先谢了,各位~~~~~~~~~~~~~
Option ExplicitPublic gobjConn As ADODB.ConnectionPublic Sub gCreateConn()
    On Error Resume Next
    Dim strConnStr As String
    strConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db\123.mdb;Persist Security Info=False;Jet OLEDB:Database Password=456;"
    Set gobjConn = New ADODB.Connection
    gobjConn.Open strConnStr
    If Err.Number <> 0 Then
        MsgBox "调用gCreateConn()出错了,出错代码:" & Err.Number & ",出错代码描述:" & Err.Description
        Err.Clear
        Call gCloseConn
        End
    End If
End SubPublic Sub gCloseConn() '过程_释放一个ADODB.Connection对象
    On Error Resume Next
    If Not gobjConn Is Nothing Then
        If gobjConn.State <> adStateClosed Then
            gobjConn.Close
        End If
        Set gobjConn = Nothing
    End If
    If Err.Number <> 0 Then
        MsgBox "调用gCloseConn()出错了"
        Err.Clear
    End If
End Sub

解决方案 »

  1.   


    Public CN As New ADODB.Connection
    Sub main()
    CN.Open "DBQ=" & App.Path & "\mdb\data.mdb" & ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
    MDIForm1.Show
    End Sub
    上面是我的   要真连不上 VB会提示错误的   懒得自己写  反正都要END的 最多再END 前 写点代码 CLOSE ON ERROR RESUME NEXT 
    CN.CLOSE 
    END  
      

  2.   

    学习了,这样很简练~
    我的代码中,ON ERROR RESUME NEXT 这句会不会引发后患呢?
    比如在调用 gCreateConn()之前已经发生了错误,那么gCreateConn()中的MsgBox "调用gCreateConn()出错了,出错代码:" & Err.Number & ",出错代码描述:" & Err.Description会不会被执行到啊?
    同理,在调用gCloseConn() 之前已经发生了错误,那么gCloseConn() 中的MsgBox "调用gCloseConn()出错了"会不会被执行到啊?
      

  3.   

    其实不用写哪么复杂 
    关闭一个连接   
    出现的错误一般就是 
    已经CLOSE了 
    再执行一遍 CLOSE 报错  用ON ERROR RESUME NEXT 不会有问题 
    至于你那个OPEN  我看你后面的代码了   
    也就是提示错误 再结束程序  没见你还要执行什么其他代码 
    不是和VB自己给的提示一样吗?
    那费那精神写错误代码干啥 
    不如学我样 不写 on error resume next 直接等VB的提示
      

  4.   

    极少用On Error Resume Next
      

  5.   


    Option ExplicitPublic gobjConn As ADODB.ConnectionPublic Sub gCreateConn()
        Dim strConnStr As String
        strConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db\123.mdb;Persist Security Info=False;Jet OLEDB:Database Password=456;"
        Set gobjConn = New ADODB.Connection
        gobjConn.Open strConnStr
    End SubPublic Sub gCloseConn()
        On Error Resume Next
        gobjConn.Close
        Set gobjConn = Nothing 
    End Sub修改好了,这样没问题吧
    我知道了,On Error Resume Next不能滥用,要有目的的用,否则就失去了它的意义。
        On Error Resume Next
        gobjConn.Close
        Set gobjConn = Nothing 

        If Not gobjConn Is Nothing Then
            If gobjConn.State <> adStateClosed Then
                gobjConn.Close
            End If
            Set gobjConn = Nothing
        End If
    效果是一样的,而前者更简练。而On Error Resume Next在这里起到了作用,相当于If gobjConn.State <> adStateClosed then。
    实践出真知~~~~~~~~~~~
    【蠢瓜】,谢了~~~~
      

  6.   

    Set gobjConn = New ADODB.Connection
    Set gobjConn = Nothing 
    这2句也多余
      

  7.   

    Set gobjConn = New ADODB.Connection
    可以用Public gobjConn As New ADODB.Connection代替Set gobjConn = Nothing 为什么多余呢?
    不是要把这个对象释放掉吗?这样不是可以节省内存资源吗?
      

  8.   

    现在的内存 不是贵到好几千1M的时候  
    内存再少的机器 也有256M了
    也不再是只有640K内存可使用的时候了 
    1个连接能用掉多少内存?  有时间折腾这个 不如去研究点别的更好