'在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
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
我的代码中,ON ERROR RESUME NEXT 这句会不会引发后患呢?
比如在调用 gCreateConn()之前已经发生了错误,那么gCreateConn()中的MsgBox "调用gCreateConn()出错了,出错代码:" & Err.Number & ",出错代码描述:" & Err.Description会不会被执行到啊?
同理,在调用gCloseConn() 之前已经发生了错误,那么gCloseConn() 中的MsgBox "调用gCloseConn()出错了"会不会被执行到啊?
关闭一个连接
出现的错误一般就是
已经CLOSE了
再执行一遍 CLOSE 报错 用ON ERROR RESUME NEXT 不会有问题
至于你那个OPEN 我看你后面的代码了
也就是提示错误 再结束程序 没见你还要执行什么其他代码
不是和VB自己给的提示一样吗?
那费那精神写错误代码干啥
不如学我样 不写 on error resume next 直接等VB的提示
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。
实践出真知~~~~~~~~~~~
【蠢瓜】,谢了~~~~
Set gobjConn = Nothing
这2句也多余
可以用Public gobjConn As New ADODB.Connection代替Set gobjConn = Nothing 为什么多余呢?
不是要把这个对象释放掉吗?这样不是可以节省内存资源吗?
内存再少的机器 也有256M了
也不再是只有640K内存可使用的时候了
1个连接能用掉多少内存? 有时间折腾这个 不如去研究点别的更好