|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 没名字了 于 2014-3-12 13:40 编辑
说来说去,我感觉我们前面说的都错了
看下面的两个实例
Sub 实例1
tt = Timer
Dim cnn As Object, cnn2 As Object, SQL$, Mypath$, MyName$, arr, brr(1 To 60000, -1 To 11), i&, j&, m&, n&
Application.ScreenUpdating = False
Mypath = ThisWorkbook.Path & "\"
MyName = Dir(Mypath & "*.xls")
Do While MyName <> ""
If MyName <> ThisWorkbook.Name Then
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath & MyName
End If
MyName = Dir()
Loop
MsgBox Timer - tt
End Sub
Sub 实例2
tt = Timer
Dim cnn As Object, cnn2 As Object, SQL$, Mypath$, MyName$, arr, brr(1 To 60000, -1 To 11), i&, j&, m&, n&
Application.ScreenUpdating = False
Mypath = ThisWorkbook.Path & "\"
MyName = Dir(Mypath & "*.xls")
Do While MyName <> ""
If MyName <> ThisWorkbook.Name Then
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath & MyName
Set cnn2 = CreateObject("ADODB.Connection")
cnn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath & MyName
End If
MyName = Dir()
Loop
MsgBox Timer - tt
End Sub
这两个的速度差说明了什么?
按照我的理解,这与RS又无关了,而是由于Set cnn = CreateObject("ADODB.Connection")这个语句
当程序中只创建了单一的 Object对象时,在更换目标指向的时候系统会有明确的Object对象目标去关闭和重新连接,但是同时具有多个 Object对象时,就似乎失去了目标,不再去关闭和重连,而是接收指令直接创建新的 Object对象。原来的 Object直接失效或者从内存中注销掉而不是关闭。如果把Set cnn = CreateObject("ADODB.Connection")这句换成dim cnn as new ADODB.Connection,或者把这句移到循环外面,就会出现对象未关闭的错误。 |
|