Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]创建对象的两个格式是不是一样的意思?

刘小建  发表于:2015-02-17 19:01:38  
复制

    Dim objConn As ADODB.Connection
    Set objConn = CreateObject("ADODB.Connection")

    Dim objConn As ADODB.Connection
    Set objConn = new ADODB.Connection

请问,这两句是一样的吗?可以互换吗?

谢谢!

 

Top
刘小建 发表于:2015-02-17 19:08:20
我试试互换,可以的,为什么呢?

cspa 发表于:2015-02-17 21:43:56

理解了NEW关键字也就解释了你的问题。以下引自access VBA 帮助:

Dim 语句

      

声明变量并分配存储空间。

语法

Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .

Dim 语句的语法包含下面部分:

部分 描述
WithEvents 可选的。关键字,说明 varname 是一个用来响应由 ActiveX 对象触发的事件的对象变量。只有在类模块中才是合法的。使用 WithEvents,可以声明任意个所需的单变量,但不能使用 WithEvents 创建数组NewWithEvents 不能一起使用。
varname 必需的。变量的名称;遵循标准的变量命名约定。
subscripts 可选的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:
  [lower To] upper [, [lower To] upper] . . .
如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有使用 Option Base 语句,则下界为 0。
New 可选的。可隐式地创建对象的关键字。如果使用 New 来声明对象变量,则在第一次引用该变量时将新建该对象的实例,因此不必使用 Set 语句来给该对象引用赋值。New 关键字不能声明任何内部数据类型的变量,以及从属对象的实例,也不能与 WithEvents 一起使用。
type 可选的。变量的数据类型;可以是 Byte Boolean IntegerLongCurrencySingleDoubleDecimal(目前尚不支持)、DateString(对变长的字符串)、String * length (对定长的字符串)、ObjectVariant用户定义类型、或对象类型。所声明的每个变量都要一个单独的 As type 子句。


说明

模块级别中用 Dim 声明的变量,对该模块中的所有过程都是可用的。在过程级别中声明的变量,只在过程内是可用的。

可以使用 Dim 语句在模块级或过程级中声明变量的数据类型。例如,下面的语句声明了 Integer 类型的变量。

Dim NumberOfEmployees As Integer

也可以使用 Dim 语句来声明变量的对象类型。下面的语句为工作表的新建实例声明了一个变量。

Dim X As New Worksheet

如果定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将该引用对象的变量赋值为一个已有对象。在该变量被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任一个对象实例。

 



刘小建 发表于:2015-02-18 16:39:46

谢谢!

    Dim objConn As New ADODB.Connection

这样写比较简单,那么隐式和显式创建对象都可以,显式有什么好处吗?


还有,这样说下面两句都是显式创建对象,那这两句没有什么区别是吗?
'    Set objConn = CreateObject("ADODB.Connection")
'    Set objConn = New ADODB.Connection

谢谢指点啦!

何保辛 发表于:2015-03-08 08:18:32

大家注意,这是完全不一样的操作!


'    Set objConn = New ADODB.Connection

这是当你的开发环境有引用 ADODB库 的时候才能正常工作,你可以通过按 F2 (或工具菜单》引用)来看看有没有引用!

你 Dim objConn as ADODB.Connection 是不会报错的!

New ADODB.Connection 是用 New 语句生成对象,是编译时已经定义好要衍生对象的类


'    Set objConn = CreateObject("ADODB.Connection")

这是不管你有没有引用 ADODB库,只要你的电脑安装了 ADODB组件,注册表里面有这个 库就能工作。

CreateObject 是 VB 里面的一个通用函数,用名称来建立一个对象,这是运行时的操作

这语法,可以同时在  

1. VB
2. VBS 脚本
3. ASP 网页

都能运行。


但是因为没有引用,开发的时候,我们根本就不知道有什么 类方法、类属性可以用;

那就是意味着你写错了代码,开发环境都不会报错,那就是 VBS 和 ASP 根本就没有开发环境,

只需要用文本编辑器就能开发的原因。


很明显的是,用编译时定义好对象库在运行上会快很多!因为

在运行代码的时候,只是在系统找 一个8字节的16进制 id查找,编译好的代码调用类属性,和类方法的时候,已经是一个相对地址而已;

相反,运行时编译的对象,就要编译器去用文本匹配系统里面的对象库,每次调用对象属性都是用文本来匹配。




总记录:4篇  页次:1/1 9 1 :