论文部分内容阅读
摘要:在VB中变量的数据类型有很多种类,如字符型串型、数值型、日期型、布尔型等。还有一种特殊类型:可变类型(Variant)。定义了一个可变类型变量后,该变量可以存放任何类型的数据(数值、字符、日期等),这样在给变量赋值时就不用对数据进行转换了,VB系统会根据赋給变量的值的不同自动进行数据类型的转换。
关键词:变量;数据类型;可变类型;程序设计
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)26-1720-02
Variant Variables Use In Visual Basic
WANG Jin-feng
(Wuhan Engineering Institute, Wuhan 430415, China)
Abstact: Variables data type in Visual Basic is of many types such as string,numeric,date,boolen etc. And among them is Variant, a special type. A variables which is defined by the variant can be stored with any type of data (numeric,string, date and so on).Therefore,it is not necessary for usto make any conversion between data types, because Visual Basic can do so automatically according to the value of defined variables.
Key words: variables; data type; variant; programming
1 VB中的变量
在Visual Basic中可以用名字表示内存单元,这样就能访问内存中的数据。一个有名称的内存单元称为变量。程序在运行过程中可以用变量临时存储数据,变量的值可以发生变化。每个变量都有名字和数据类型,通过名字引用一个变量,而通过数据类型来确定该变量的存储方式。
在使用变量之前,一般须声明变量名和类型。在Visual Basic中,可以显式或隐式地声明变量及其类型。
1.1 显式声明:在变量使用之前对变量进行声明。
格式:Dim|Private|Static|Public <变量名>[As<类型>]
例如下列语句分别声明了Integer、Double、String、Currency类型的变量:
Dim x As Integer
Private y As Double
Static m As String
Public n As Currency
1.2 隐式声明:在Visual
Basic中,变量可以不经声明而直接使用,即为隐式声明。
在隐式声明中,如果把变量名拼错了的话,会导致一个难以查找的错误。
为了避免写错变量名引起的麻烦,用户可以规定,只要遇到一个未经明确声明就当成变量的名字,Visual Basic 都发出错误警告。这就是强制显式声明变量。
要强制显式声明变量,只须在类模块、窗体模块或标准模块的声明段中加入这条语句:
Option Explicit
在添加Option Explicit语句后,Visual Basic 将自动检查程序中是否有未定义的变量,发现后将显示错误信息。
2 可变类型变量(Variant)
在显式声明中,使用类型关键字Variant定义类型(声明格式中变量明后带As Variant;或仅定义变量而不作类型声明(即在声明语句中不带AS<类型>),或者未经声明而直接使用的变量(隐式声明),这种变量称为可变类型变量(Variant)。这样,变量的类型,即对数据的存储形式,将随着存放的数据类型VB自动完成各种数据类型必要的转换。在Variant变量中可以存放任何类型的数据,包括数值、字串、日期和时间。
例如,
Dim sa As Variant或
Dim sa都可以把sa定义为可变类型变量。
例如:
sa = “100” ’ 存入字符串 “100”
sa = sa – 10’ sa的值变为数值90
sa = “JD” Str(sa)’ sa的值变为字符串“JD90”
sa =sa 100 ’出错,类型不匹配
可以看出,随着所赋的值不同,变量的类型在不断变化,这就是“可变数据类型”的含义。
Variant是一种特殊的数据类型,除了定长String数据及用户定义类型外,可以包含任何种类的数据。
当Variant类型的变量包含数值数据时,可以是任何整型或实型数,负数时范围从-1.798E308到-4.941E-324,正数时则从4.941E-324到1.798E308。通常,Variant变量会保持原来的数据类型。例如,如果把一个Integer类型的值赋值给Variant类型的变量,则接下来的运算会把此Variant当成Integer来处理。但是,如果算术运算针对包含Byte、Integer、Long或Single的Variant变量执行,而且结果 超过原来 数据类型 正常范围时,则在Variant变量中的结果会提升到数值范围较大的数据类型。如Byte则提升到Integer,Integer提升到Long,而Long 和Single则提升为Double。当Variant变量中的Currency、Decimal及Double类型的值超过它们各自的范围时,就会发生错误。
在程序代码中,可以用Variant数据类型来替换任何数据类型,这样会更有适应性。如果Variant变量的内容是数字,它可以用字符串来表示数字或者用它实际的值来表示,这将由上下文来决定。
例如:
Dim MyVal As Variant
MyVal = 2856
在此例中,MyVal内有一实际值为2856的数值型数据。可以进行算术运算,如果用 运算符来将MyVal与其他含有数字的Variant或数值类型的变量相加,结果便是算术和。
可利用VarType ()函数TypeName ()函数来测试Variant变量的数据类型。
3 Variant变量的特定值
除了可以像其它标准数据类型一样操作外,Variants 还包含三种特定值:Empty,Null 和 Error。
3.1 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。
3.2 Null 值
Variant 数据类型还可包含一特定值:Null。Null通常用于数据库应用程序,表示未知数据或丢失的数據。 由于在数据库中使用 Null 方法,Null 具有某些唯一的特性:
1)对包含 Null 的表达式,计算结果总是Null。于是说Null 通过表达式“传播”;如果表达式的部分之值为Null,那么整个表达式的值也为 Null。
2)将 Null 值、含 Null 的 Variant 变量或计算结果为 Null 的表达式作为参数传递给大多数函数,将会使函数返回Null。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的程序。
不应将Empty与Null弄混。Null 是表示Variant变量确实含有一个无效数据。
3.3 Error值
在Variant数据类型中,Error是用来指示在过程中出现错误时的特殊值。然而,不像对其他种类的错误那样,程序并不产生普通的应用程序级的错误处理。这可以让程序员,或应用程序本身,根据此错误值采另外的行动。可以用CVE函数将实数转换为错误值来产生Error值。
4 使用Variant变量时应注意的的问题
Variant变量的使用十分灵活,因为对它赋值不需要考虑类型转换的问题。但是,这种灵活性也带来一定隐患。使用时应注意以下几点:
1)如果对Variant变量进行算术运算,必须确保变量中存放的是某种形式的数值,包括整数、浮点数、定点数或可以解释为数值的字符串。如果Variant变量中的内容是“JD90”,则不能对其进行算术运算,因为“JD90”不是有效的数值型形式。同理,可以对字符串“ 10”或“–2E3”进行算术运算,但不能对“123EX”进行算术运算。
2)在对存放字符串的Variant变量进行操作时可能产生歧义。运算符“ ”既可以作数值相加,又可以用于字符串连接。当两个Variant变量之间使用“ ”运算时,其结果可能出乎意料,具体结果取决于两个变量中的内容。如果两个变量都是数值,则执行算术加运算;如果两个变量中存放的都是字符串,则执行字符串连接操作;如果一个变量中是数值而另一个变量中是字符串,则情况就复杂了,Visual Basic先试着将字符串转换为数值,如果转换成功则进行算术加运算,不成功则把另一个数值转换成字符串,然后对两个字符串进行连接操作,形成一个新的字符串。为了避免这种情况,执行字符串连接时,尽量使用运算符“
关键词:变量;数据类型;可变类型;程序设计
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)26-1720-02
Variant Variables Use In Visual Basic
WANG Jin-feng
(Wuhan Engineering Institute, Wuhan 430415, China)
Abstact: Variables data type in Visual Basic is of many types such as string,numeric,date,boolen etc. And among them is Variant, a special type. A variables which is defined by the variant can be stored with any type of data (numeric,string, date and so on).Therefore,it is not necessary for usto make any conversion between data types, because Visual Basic can do so automatically according to the value of defined variables.
Key words: variables; data type; variant; programming
1 VB中的变量
在Visual Basic中可以用名字表示内存单元,这样就能访问内存中的数据。一个有名称的内存单元称为变量。程序在运行过程中可以用变量临时存储数据,变量的值可以发生变化。每个变量都有名字和数据类型,通过名字引用一个变量,而通过数据类型来确定该变量的存储方式。
在使用变量之前,一般须声明变量名和类型。在Visual Basic中,可以显式或隐式地声明变量及其类型。
1.1 显式声明:在变量使用之前对变量进行声明。
格式:Dim|Private|Static|Public <变量名>[As<类型>]
例如下列语句分别声明了Integer、Double、String、Currency类型的变量:
Dim x As Integer
Private y As Double
Static m As String
Public n As Currency
1.2 隐式声明:在Visual
Basic中,变量可以不经声明而直接使用,即为隐式声明。
在隐式声明中,如果把变量名拼错了的话,会导致一个难以查找的错误。
为了避免写错变量名引起的麻烦,用户可以规定,只要遇到一个未经明确声明就当成变量的名字,Visual Basic 都发出错误警告。这就是强制显式声明变量。
要强制显式声明变量,只须在类模块、窗体模块或标准模块的声明段中加入这条语句:
Option Explicit
在添加Option Explicit语句后,Visual Basic 将自动检查程序中是否有未定义的变量,发现后将显示错误信息。
2 可变类型变量(Variant)
在显式声明中,使用类型关键字Variant定义类型(声明格式中变量明后带As Variant;或仅定义变量而不作类型声明(即在声明语句中不带AS<类型>),或者未经声明而直接使用的变量(隐式声明),这种变量称为可变类型变量(Variant)。这样,变量的类型,即对数据的存储形式,将随着存放的数据类型VB自动完成各种数据类型必要的转换。在Variant变量中可以存放任何类型的数据,包括数值、字串、日期和时间。
例如,
Dim sa As Variant或
Dim sa都可以把sa定义为可变类型变量。
例如:
sa = “100” ’ 存入字符串 “100”
sa = sa – 10’ sa的值变为数值90
sa = “JD” Str(sa)’ sa的值变为字符串“JD90”
sa =sa 100 ’出错,类型不匹配
可以看出,随着所赋的值不同,变量的类型在不断变化,这就是“可变数据类型”的含义。
Variant是一种特殊的数据类型,除了定长String数据及用户定义类型外,可以包含任何种类的数据。
当Variant类型的变量包含数值数据时,可以是任何整型或实型数,负数时范围从-1.798E308到-4.941E-324,正数时则从4.941E-324到1.798E308。通常,Variant变量会保持原来的数据类型。例如,如果把一个Integer类型的值赋值给Variant类型的变量,则接下来的运算会把此Variant当成Integer来处理。但是,如果算术运算针对包含Byte、Integer、Long或Single的Variant变量执行,而且结果 超过原来 数据类型 正常范围时,则在Variant变量中的结果会提升到数值范围较大的数据类型。如Byte则提升到Integer,Integer提升到Long,而Long 和Single则提升为Double。当Variant变量中的Currency、Decimal及Double类型的值超过它们各自的范围时,就会发生错误。
在程序代码中,可以用Variant数据类型来替换任何数据类型,这样会更有适应性。如果Variant变量的内容是数字,它可以用字符串来表示数字或者用它实际的值来表示,这将由上下文来决定。
例如:
Dim MyVal As Variant
MyVal = 2856
在此例中,MyVal内有一实际值为2856的数值型数据。可以进行算术运算,如果用 运算符来将MyVal与其他含有数字的Variant或数值类型的变量相加,结果便是算术和。
可利用VarType ()函数TypeName ()函数来测试Variant变量的数据类型。
3 Variant变量的特定值
除了可以像其它标准数据类型一样操作外,Variants 还包含三种特定值:Empty,Null 和 Error。
3.1 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。
3.2 Null 值
Variant 数据类型还可包含一特定值:Null。Null通常用于数据库应用程序,表示未知数据或丢失的数據。 由于在数据库中使用 Null 方法,Null 具有某些唯一的特性:
1)对包含 Null 的表达式,计算结果总是Null。于是说Null 通过表达式“传播”;如果表达式的部分之值为Null,那么整个表达式的值也为 Null。
2)将 Null 值、含 Null 的 Variant 变量或计算结果为 Null 的表达式作为参数传递给大多数函数,将会使函数返回Null。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的程序。
不应将Empty与Null弄混。Null 是表示Variant变量确实含有一个无效数据。
3.3 Error值
在Variant数据类型中,Error是用来指示在过程中出现错误时的特殊值。然而,不像对其他种类的错误那样,程序并不产生普通的应用程序级的错误处理。这可以让程序员,或应用程序本身,根据此错误值采另外的行动。可以用CVE函数将实数转换为错误值来产生Error值。
4 使用Variant变量时应注意的的问题
Variant变量的使用十分灵活,因为对它赋值不需要考虑类型转换的问题。但是,这种灵活性也带来一定隐患。使用时应注意以下几点:
1)如果对Variant变量进行算术运算,必须确保变量中存放的是某种形式的数值,包括整数、浮点数、定点数或可以解释为数值的字符串。如果Variant变量中的内容是“JD90”,则不能对其进行算术运算,因为“JD90”不是有效的数值型形式。同理,可以对字符串“ 10”或“–2E3”进行算术运算,但不能对“123EX”进行算术运算。
2)在对存放字符串的Variant变量进行操作时可能产生歧义。运算符“ ”既可以作数值相加,又可以用于字符串连接。当两个Variant变量之间使用“ ”运算时,其结果可能出乎意料,具体结果取决于两个变量中的内容。如果两个变量都是数值,则执行算术加运算;如果两个变量中存放的都是字符串,则执行字符串连接操作;如果一个变量中是数值而另一个变量中是字符串,则情况就复杂了,Visual Basic先试着将字符串转换为数值,如果转换成功则进行算术加运算,不成功则把另一个数值转换成字符串,然后对两个字符串进行连接操作,形成一个新的字符串。为了避免这种情况,执行字符串连接时,尽量使用运算符“