Dim cnn As ADODB.Connection和Dim cnn As new ADODB.Connection有什么不同?

jyq001 2011-04-17 07:16:54
请教个问题:
用ADO对象链接ACCESS时,一般都用
Dim cnn As new ADODB.Connection
Dim rst As new ADODB.Recordset
Dim cmd As New ADODB.Command

但也有不带new的,例如:
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim cmd As ADODB.Command

还有在同一模块中定义,前面的语句不带new,后面的语句又带new,到底有什么差异?哪种定义方式正确、规范?
...全文
1360 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyq001 2011-04-25
  • 打赏
  • 举报
回复
非常感谢楼上几位朋友,因只有20分了,每人给5分,抱歉!
dbcontrols 2011-04-18
  • 打赏
  • 举报
回复
NEW的英文意思是新的意思
就是一个新的副本
所以可以NEW很多次

[Quote=引用 6 楼 jyq001 的回复:]
引用 4 楼 veron_04 的回复:
你恰巧说反了,不带New 没有实例化
带New ,实例化了

再问几个问题:
1、根据你的答复,说明必须要带上new才能正常工作,是不是?
2、很多源码中只有Dim cnn As ADODB.Connection,不带new,又是为什么?什么意思?
3、有些ACCESS数据库源码中,没有set cnn = ADODB.Connection,怎……
[/Quote]
神马都能聊 2011-04-18
  • 打赏
  • 举报
回复
你可以这样理解,下面两段代码近似于一样的.

dim cn as adodb.connection
set cn = new adodb.connection
set cn = nothing


dim cn as new adodb.connection
set cn = nothing
神马都能聊 2011-04-18
  • 打赏
  • 举报
回复
还有一种方法,你可以使用New关键字定义变量,例如:
dim cn as new adodb.connection
这里使用了new关键字,有了它你就不再需要set cn = new adodb.connection,使用后你仍然需要set cn = nothing.
神马都能聊 2011-04-18
  • 打赏
  • 举报
回复
dim 是用来定义变量的关键字.

dim 变量 as 类型X
这是定义一个类型X的变量,比如:dim str as string

再来看你发的代码dim 变量 as adodb.connection

这是定义一个adodb.connection类型的变量,这个变量是个对象,这个对象还没有被初始化,要用这个变量,你需要set 变量 = new adodb.connection 这样你就可以使用变量了,此时的变量在内存中存在了,有效了,set 变量 = new XXX可以让为变量在内存中申请一段空间,于是变量存在了有效了,可以用了.

为了销毁这段内存空间,我们在不用变量了之后可以用 set 变量 = nothing 来释放空间(此处不细说了,不然你会晕).


clear_zero 2011-04-18
  • 打赏
  • 举报
回复
不要尽信书,装一个vb6.多实践下就明白些

如果你定义的时候
Dim cnn As new ADODB.Connection

就不用后来的set ......

jyq001 2011-04-18
  • 打赏
  • 举报
回复
看看这个帖子dbcontrols的回答,也没有使用set cnn = new ADODB.Connection呀?
http://topic.csdn.net/u/20110405/19/d362a8ab-a708-48e2-acb1-aa380d1bec48.html?46426
jyq001 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 veron_04 的回复:]
你恰巧说反了,不带New 没有实例化
带New ,实例化了
[/Quote]
再问几个问题:
1、根据你的答复,说明必须要带上new才能正常工作,是不是?
2、很多源码中只有Dim cnn As ADODB.Connection,不带new,又是为什么?什么意思?
3、有些ACCESS数据库源码中,没有set cnn = ADODB.Connection,怎么也能运行?
4、有了Dim rst As new ADODB.Recordset,是否必须要用Set rst = New ADODB.Recordset ?
5、这些语句不放from-load中,都放在“通用”中可以吗?
clear_zero 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 clear_zero 的回复:]

就是说是用Dim cnn As new ADODB.Connection后必须还要用Dim cnn As ADODB.Connection,否则无法是用,是这样吗

Dim cnn As new ADODB.Connection
set cnn = ADODB.Connection
[/Quote]

错了
Dim cnn As new ADODB.Connection
set cnn = new ADODB.Connection
贝隆 2011-04-17
  • 打赏
  • 举报
回复
你恰巧说反了,不带New 没有实例化
带New ,实例化了
clear_zero 2011-04-17
  • 打赏
  • 举报
回复
就是说是用Dim cnn As new ADODB.Connection后必须还要用Dim cnn As ADODB.Connection,否则无法是用,是这样吗

Dim cnn As new ADODB.Connection
set cnn = ADODB.Connection
jyq001 2011-04-17
  • 打赏
  • 举报
回复
你的意思是:
带new的,声明一个Connection对象(内存中不存在这个对象);
不带new的,不仅声明一个对象,而且将这个对象实例化(也就是在内存中分配空间);
是不是?

另外你说“要使用,必须实例化”:
就是说是用Dim cnn As new ADODB.Connection后必须还要用Dim cnn As ADODB.Connection,否则无法是用,是这样吗?
贝隆 2011-04-17
  • 打赏
  • 举报
回复
前者声明一个Connection对象(内存中不存在这个对象)
后者不仅声明一个对象,而且将这个对象实例化(也就是在内存中分配空间)

要使用,必须实例化。
vb学生管理系统源代码 部分代码 Public UserName As String Public txtSQL As String 'use to store record SQLsentence Public dream As ADODB.Recordset 'use to store record object Public Msgtext As String '用来存放返回信息 Public OK As Boolean ' 'Public db As String Public Sub highlight() With Screen.ActiveForm If (TypeOf .ActiveControl Is TextBox) Then .ActiveControl.SelStart = 0 .ActiveControl.SelLength = Len(.ActiveControl) End If End With End Sub Sub Main() 'Dim Login As New Login 'Login.Show vbModal 'f Not Login.OK Then 'Login Failed so exit app ' End 'End If 'Unload studentmdi ' Set login = New login login.Show End Sub Public Function connectstring() As String connectstring = "Provider=Microsoft.jet.OLEDB.3.51;Data source=f:\schoolgroup\school.mdb" End Function Public 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 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.ExecuteSQL 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 Set cnn = Nothing Exit Function ExecuteSQL_Error: Msgstring = "查询错误:" & err.Description Resume executeSQL_exit End Function Public Function Testtxt(txt As String) As Boolean If Trim(txt) = "" Then Testtxt = False Else Testtxt = True End If End Function

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧