Object 数据类型
Object 变量作为 32 位(4 个字节)地址来存储,该地址可引用应用程序中或某些其它应用程序中的对象。可以随后(用 Set 语句)指定一个被声明为 Object 的变量去引用应用程序所识别的任何实际对象。
Dim objDb As Object
Set objDb = OpenDatabase ("c:\Vb5\Biblio.mdb")
在声明对象变量时,请试用特定的类,而不用一般的 Object(例如用 TextBox而不用 Control,或者像上面的例子那样,用 Database 取代 Object)。运行应用程序之前,Visual Basic 可以决定引用特定类型对象的属性和方法。因此,应用程序在运行时速度会更快。在“对象浏览器”中列举了特定的类。
当使用其它应用程序的对象,并在“对象浏览器”中的“类”列表中列举对象时,不要用 Variant 或一般的 Object,而应声明对象。这样可确保 VisualBasic 能够识别引用的特定类型对象,在运行时解决引用问题。
详细信息 关于创建和指定对象以及对象变量的更详细信息,请参阅本章后面的“创建对象”部分。
转换数据类型
Visual Basic 提供了几种转换函数,可用来将值转换成特定数据类型。例如,用 CCur 函数将值转换成 Currency 类型: PayPerWeek = CCur (hours * hourlyPay)
注意 对目标数据类型,传递到转换函数的值必须是有效的,否则会发生错误。例如,如果想把 Long 型数转换成 Integer 型数,那么,Long 型数必须在 Integer 数据类型的有效范围之内。
详细信息 在联机帮助中查找指定的转换函数。
Variant 数据类型
Variant 变量能够存储所有系统定义类型的数据。如果把它们赋予 Variant 变量,则不必在这些数据的类型间进行转换; Visual Basic 会自动完成任何必要的转换。例如:
Dim SomeValue '缺省为 Variant。
SomeValue = "17" 'SomeValue包含 "17"(双字符的串)。
SomeValue = SomeValue - 15 '现在, SomeValue 包含数值 2。
SomeValue = "U" & SomeValue '现在, SomeValue 包含 "U2" (双字符的串)。
不必过多关注 Variant 变量中数据的类型就可对 Variant 变量进行操作,但须避免落入陷阱。
1.如果对 Variant 变量进行数学运算或函数运算,则 Variant 必包含某个数。更详细的信息,请参阅《联机手册》中“高级变量主题”中的“变量中存储的 Numeric 值”部分。
2.如果正在连接两个字符串,则用 " & " 操作符而不用 " + " 操作符。更详细的信息,请参阅《联机手册》中“高级变量主题”中的“Variant 变量中存储的 Strings”部分。
除了可以像其它标准数据类型一样操作外,Variants 还包含三种特定值:Empty,Null 和 Error。
Empty 值
有时需要知道是否已将一个值赋予所创建的变量。在赋值之前,Variant 变量具有值 Empty。值 Empty 是异于0、零长度字符串 ("") 或 Null 值的特定值。可用 IsEmpty 函数测试 Empty 值:
If IsEmpty (Z) Then Z = 0
当 Variant 变量包含 Empty 值时,可在表达式中使用它;将其作为 0 或零长度字符串来处理,这要根据表达式来定。
只要将任何值(包括 0、零长度字符串或 Null)赋予 Variant 变量,Empty 值就会消失。而将关键字 Empty 赋予 Variant 变量,就可将 Variant 变量恢复为 Empty。
Null 值
Variant 数据类型还可包含一特定值:Null。Null通常用于数据库应用程序,表示未知数据或丢失的数据。 由于在数据库中使用 Null 方法,Null 具有某些唯一的特性:
1.对包含 Null 的表达式,计算结果总是 Null。于是说 Null 通过表达式“传播”;如果表达式的部分之值为 Null,那么整个表达式的值也为Null。
2.将 Null 值、含 Null 的 Variant 变量或计算结果为 Null 的表达式作为参数传递给大多数函数,将会使函数返回 Null。
3.Null 值经由返回 Variant 数据类型的内在函数传播。
也可用 Null 关键字指定 Null 值。
Z = Null
也可用 IsNull 函数测试 Variant 变量是否包含 Null 值。
If IsNull (X) And IsNull (Y) Then
Z = Null
Else
Z = 0
End If
如果将 Null 值赋予 Variant 以外的任何其它类型变量,则将出现可以捕获的错误。而将 Null 值赋予 Variant 则不会发生错误,Null 将通过包含Variant 变量的表达式传播(尽管 Null 并不通过某些函数来传播)。可以从任何具有 Variant 返回值的函数过程返回 Null。
除非明确将 Null 赋予变量,否则变量不会设置成 Null 值,所以,如果不在应用程序中使用 Null,就不必书写测试 Null 和处理 Null 的程序。
详细信息 关于如何在表达式中使用Null的详细信息,请参阅语言参考的“Null”部分。
Error 值
在 Variant 中,Error 是特定值,指出已发生的过程中的错误状态。但是,与其它类型错误不同,这里并未发生正常的应用程序级的错误处理。因此,程序员或应用程序本身可根据 Error 值进行取舍。利用 CVErr 函数将实数转换成错误值就可建立 Error 值。 详细信息 关于如何在表达式中使用 Error 值,请参阅《Visual Basic 6.0语言参考手册》中的“CVErr 函数”部分。关于错误处理的信息,请参阅第十三章“调试代码和处理错误”。有关 Variant 数据类型的更详细信息,请参阅《联机手册》中的“高级变量主题”。
高级变量主题
数值在变量中的内部表示
Variant 变量维护它们所存储的数值的内部表示。这个表示将决定 VisualBasic 在执行比较操作和其它操作时如何处理这些值。将值赋予 Variant 变量时,Visual Basic 会用最紧凑的表示正确记录这个值。以后的操作可能使Visual Basic 改变这个用于特定变量的表示(Variant 变量不是无类型变量,而是能够随意改变类型的变量)。这些内部表示与本章前面在“数据类型”中讨论的数据类型相一致。
注意 Variant 总保持 16 位,无论其中存储了什么数据。对象、字符串和数组,在物理上并非存于 Variant 之中;在这些情况下,用四个字节的 Variant 来保持对象引用、或者字符串或数组的指针。而真正的数据存在其它地方。
很多时候,不必了解Visual Basic为特殊变量使用哪一种变量类型;VisualBasic会自动转换类型。若想了解Visual Basic正在使用哪种变量类型,可使用 VarType 函数。
例如,如果在 Variant 变量中存储二进制值,Visual Basic 就会用 Double 内部表示。如果知道应用程序并不需要 Double 值提供的高精度(以及由此而来的低速度),那么将此值转换成 Single 甚至转换成 Currency 就可以加快计算速度:
If VarType (X) = 5 Then X = CSng (X) '转换成单精度。
对 Array 变量,VarType 的值等于数组元素与数据类型返回值之和。例如,这个数组包含 Double 值:
Private Sub Form_Click ()
Dim dblSample (2) As Double
MsgBox VarType (dblSample)
End Sub
Visual Basic 的今后版本可能会增加新的 Variant 表示,所以,任何根据VarType 函数的返回值做出判断的代码都应能适当地处理非当前定义的返回值。
详细信息 关于 VarType 函数的信息,请参阅《Visual Basic 6.0语言参考手册》中的“VarType 函数”。关于数组的更详细信息,请参阅本章后面的“数组”。关于转换数据类型的详细信息,请参阅本章前面的“数据类型”。