VB中对象变量的妙用 对象变量的类型及其声明 对象变量是指向某一类对象的变量，它具有此类对象的所有性质和属性，可把它看作是一个指针，指向项目中某一特定类型的对象，对此类变量进行控制和操作，就是对项目中所有属于这一类的对象进行相同的控制和操作。它是一种具有对象性质的特殊变量。 被对象变量指向的对象可以是窗体、控件（包括自定义控件）、屏幕以及数据库的表、记录、字段等对象。 对象变量也有类型，针对不同的对象有不同的定义方式。所以对象变量在使用前必须先声明后使用。可以用Dim、Static、Global等关键字来声明对象变量。
例如：
Dim Acontrol As Control
Dim Bcontrol As New Form1
Dim Ccontrol As CommandButton
Dim Dcontrol As Command1
由此可见，对象类型包括控件和具体对象的名称（如Command1和Form1）、控件集合（如Control、CommandButton等）、窗体集合（Form）以及屏幕对象（Screen）等。这些对象类型的集合有大有小。一旦声明之后，VB将为对象变量分配内存空间（大小与具体类型有关），在内存中建立一个其指向对象或对象集合的拷贝。
对象变量在VB中应用极为广泛，VB中的绝大多数对象都可以有自己的对象变量。
对象变量的集合和指针特性
对象变量还可以看作是一个项目（Project）中属于某种类型对象的集合，这个集合可以有很多个对象，也可以只有一个，甚至可以是空集（即该种类型的对象在项目或窗体内不存在）。
对应于对象变量的集合特性，有一个非常重要的属性Count属性。所有对象变量都具有Count属性。一旦在程序中声明了对象变量，该对象变量的Count属性就自动记录该类对象的个数，因而通过读取Count属性值，便可了解到该类对象的个数。利用它，可对同一类对象的某一共同属性进行访问或操作（如同一窗体上的所有控制的字体大小），能极大地节省程序代码。另外，对一类对象进行搜寻，即可选出符合一定条件的子对象，从而达到程序智能化的目的。
在对象变量声明之后，用Set语句使一个对象变量指向一个具体的控件，这样所有与对象变量所指向的对象相关联的属性均可通过对象变量来传递。这样对象变量就具有了对象的特点，可以像对象一样在程序中赋予其属性。当需要对一个指定的窗体或控件的属性进行操作时，可用过程、函数及方法对其进行访问。当用户改变一个对象变量的性质时，与之相关联的原始数据也随之而改变，因此具有了类似于过程中的通过指针传送参数的效果。这即是对象变量的指针特性。
Set语句还可用来简化很长的控件指针。值得注意的是，Set语句并不是单纯的变量赋值语句，它不像赋值语句一样产生对象的一个拷贝，而是把一个对象变量设定为对象指针，指向不同对象变量。
下面列举一个程序实例，将一个项目内所有控制的字体、字号进行统一的操作。
1.在一个全局模块文件中定义两个全局变量。
Global Font As Control，Aform As Form
2.在此全局模块文件中定义一个子过程FontAllSame。具体如下：
Sub FontAllSame( )
For I% = 0 To Forms.Count - 1 ’Count属性值是从0开始的整数
Set Aform = Forms(I%)
For J% = 0 To Aform.Controls.Count - 1
Set Font = Aform.Controls(J%)
Font.FontName = “楷体”
Font.FontSize = 13.5
Next J%
Next I%
End Sub
3.在项目中的所有窗体的Activate事件中加入以下语句：
FontAllSame
通过以上程序代码，此项目中的任一窗体一经载入，其上所有控件的字体就都被指定为楷体，字号为13.5。
由此可见，如果对象变量可以指向项目中所有满足一定条件的对象，那么对对象变量进行定向操作，被指向的所有对象的属性即可按用户的意图变化，从而达到控制程序流程的目的。
当对象变量使用完后，可用以下语句释放对象变量所占的内存空间：
Set 对象变量 = Nothing
对象变量在数据库编程中的应用
运用数据存取对象变量（Data Access Object Variable）的方法是VB专业版数据库编程中最重要的三种方法之一。除了一些需求有限的数据库应用可以用基本的数据控件和绑定控制项法解决以外，其它的VB数据库应用程序大都能用数据存取对象法来完成。
利用对象变量可以在程序中存取ODBC 2.0的管理函数；可以在执行期间动态地建立表、字段及索引；同步更新几张表；在执行期间“显示”数据库的基本结构；可以控制多种记录类型：Dynaset、Snapshot及Table记录集合对象；可以存取存储过程和查询动作；可以存取数据库集合对象，如TableDefs、Fields、Indexes以及QueryDefs；具有真正的事物处理能力。
在VB的数据存取对象中，所有的数据库均可以看作是一个由结构良好、一致的对象所组成的包。程序员可以使用对象的属性及方法对这些对象进行检验、操作、创建及删除。
VB专业版中的数据存取对象可以分为两类，一类用于数据库结构的维护和管理，其中表示数据库结构时可以使用以下的对象：DataBase、TableDef、Field、Index，以及三个集合：TableDefs、Fields和Indexes。另一类数据存取对象则用于数据的存取。
每一个对象集合都是由若干个对象组成的，这些数据对象的集合可以看作是一个数组，并按数组的方法来调用。
一旦数据库对象建立后，就可以用它对数据库的结构进行修改和数据处理。
以下是打开一个数据库后，并取得其内各个表单（Table）的具体信息的程序实例。
Sub PrintTableInfo ( )
Dim I，J As Integer，Fname As String
Dim Db1 As DataBase，Td1 As TableDefs
Dim Fld1 As Fields
Dim FieldNum As Integer
’CMD1是一个打开文件对话框的控件名
CMD1.Filter = “ 数据库文件(*.MDB)|*.MDB|所有文件|*.* ”
CMD1.DialogTitle = “ 调入数据库文件 ”
CMD1.FilterIndex = 1
CMD1.Action = 1
Fname$ = CMD1.Filename
Set Db1 = OpenDataBase( Fname$ ) ’打开一个数据库文件
Set Td1 = Db1.TableDefs
’读取并在窗体内打印所有表单的名字，每个表单内的字段数以及字段名和类型
For I = 0 To Db1.TableDefs.Count - 1
Print Td1(I).Name
Set Fld1 = Td1( I ).Fields
FieldNum% = Fld1.Count
Print “当前表单共有”；Str$( FieldNum )；“个字段”
For J=0 To Fld1.Count - 1
Print “字段名：”，Fld1( J ).Name
Print “类型：”，Fld1( J ).Type
Next J
Next I
End Sub
从以上可以清晰地看到各数据库对象变量的层次关系。可见对较复杂和有更多要求的数据库应用程序来说，使用数据存取对象变量是最好的一种方法。
(张 雪）