New ADODB.Connection 與 CreateObject("adodb.connection)的區別 ________________________________________________________________前者是在工程中已经引用了ADO类库(工程-〉references->Microsoft ActiveX data Objects),实例化一连接对象。 后者是代码运行中后期创建一个连接对象,没有必要在工程中引用。
看看吧引用就如同定义一个变量,不引用,当然就不能用了 Dim msgtext As String Dim mrc As ADODB.RecordsetPublic Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim sTokens() As String 'Dim SQL As String On Error GoTo ExecuteSQL_Error sTokens = Split(sql) Set cnn = New ADODB.Connection cnn.Open ConnectString If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then cnn.Execute sql MsgString = sTokens(0) & "query successful" Else Set rst = New ADODB.Recordset rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条纪录" End If ExecuteSQL_Exit: Set rst = Nothing Exit Function Set cnn = Nothing ExecuteSQL_Error: MsgString = "查询错误:" & Err.Description Resume ExecuteSQL_Exit End FunctionPublic Function ConnectString() As String ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False" 'ConnectString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aa;Data Source=RJB-CL" End Function
________________________________________________________________前者是在工程中已经引用了ADO类库(工程-〉references->Microsoft ActiveX data Objects),实例化一连接对象。
后者是代码运行中后期创建一个连接对象,没有必要在工程中引用。
Dim msgtext As String
Dim mrc As ADODB.RecordsetPublic Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String
'Dim SQL As String
On Error GoTo ExecuteSQL_Error
sTokens = Split(sql)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
cnn.Execute sql
MsgString = sTokens(0) & "query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条纪录"
End If
ExecuteSQL_Exit:
Set rst = Nothing
Exit Function
Set cnn = Nothing
ExecuteSQL_Error:
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit
End FunctionPublic Function ConnectString() As String
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
'ConnectString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aa;Data Source=RJB-CL"
End Function
createobject是由内存中重新创建一个实例而不是简单的资源计数器+1的概念。如果内存中存在一个这样的实例,编译器不会理会这个实例而是将对象重新创建一个。实际上是一个完全独立的新的资源实例。并且不受GC的资源回收控制,必须自己回收。
new声明的时候,编译器回自动寻找内存中的相应实例,找到了以后,将资源计数器+1,并不会在内存中重新声明内存地址空间,他是受GC限制的,当编译器运行完毕后,会自动将资源编译器里面的该对象的资源计数器-1,如果为计数器0的话就自动释放该对象。
引用就是允许您选择另外的应用程序的对象,通过设置对那个应用程序对象库的引用您可以在您的代码中使用它。
我回答一下,看看楼主是不是感觉这个更直观:
new adodb.connection可以理解为新建一个ADO的连接变量,是ADO连接方法的一个标志变量,例如:set conn=new adodb.connection 就是说把ADO连接方法由conn来代理表示,直观的说就是设置conn为ADO的连接方法,后面的代码肯定是conn.open ...的作用也就等于adodb.connection.open了,即打开连接。CreateObject("adodb.connection)当然就是创建一个ADO对象了,也就类似于函数的声明。应该知道做程序使用后面的变量了是什么的都必须要先声明变量,然后才能进行引用和赋值。结合上面的解释,可以这样理解和使用,先用CreateObject("adodb.connection)创建ADO对象,然后再使用new adodb.connection创建已经创建的ADO对象的连接对象。
差不多了,虽然有些词语有点概念不清,我想你应该能理解了他们的作用。
new 方式 速度快于 createobject