§3.1基本数据类型数据是程序处理的对象。为了更好地处理各种各样的数据,VB定义了多种数据类型。1、数值型数据类型类型中文名字节表示范围精度Integer整型2-32768~32767精确Long长整型4-2147483648~2147483647精确Single单精度浮点型4-3.402823E1038~3.40282310386-7位有效数字Double双精度浮点型8-1.7976931348623210308~1.797693134862321030815位有效数字Currency货币型8-922337203685477.5808~922337203685477.580715位整数,4位小数Byte字节型10~255精确数据类型数值型字符串型逻辑型日期型对象型变体型整型长整型字节型单精度浮点型双精度浮点型货币型2、String(字符串型):–字符串是指连续的字符序列,专门用来存放文字信息的。分为“定长字符串型”和“变长字符串型”两大类。字符串类型所占的内存空间与字符串长度有关,最多64K个字符。3、Boolean(逻辑型、布尔型):–只有两个值True(逻辑“真”)和False(逻辑“假”),占2个字节存储空间。4、Date(日期时间型):–又称日期型,存放日期时间。占8个字节,范围公元100年1月1日~9999年12月31日。5、Object(对象型)和Variant(变体类型)将分别在后面节中讲解。§3.2常量常量:在程序运行时值不能改变的量为常量。分为直接常量和符号常量。直接常量:程序中直接使用的数据常量符号常量:用一个符号名来代替数值或字符串,称为符号常量。3.2.1直接常量的数据表示方法整型后加%(可省):123、-123、+123、123%长整型后加&:1234&、-7890&八进制&O开头:&O136(字母O)十六进制&H开头:&H3A、&H6B4&单精度后加!:11.2、11.2!、0.112E+2双精度后可加#:123.45#、0.12345E+3#货币型后加@:123.45@字符型常量:使用双引号””:–VisualBasic、你好!“–特殊的字符串:表示一个双引号字符串,表示空字符串。字符串常量中的双引号必须成对出现。逻辑型常量:只有True和False两个值。常量直接常量符号常量数值常量字符串常量逻辑常量日期常量日期型常量:使用“#”号作界定符:–#1/1/2005#、#April1,2005#、#1:00:00PM#3.2.2符号常量及命名规则符号常量的使用增加了代码的可读性,因为我们看到的是具有含义的名字而不是数字。如Pi表示常量3.1415926535,特点:一个常量一经声明,就不能在以后的语句中改变它的数值。命名规则:–1、以字母开头,其后可以是字母、数字或下划线字符(不能包含英文标点符号、空格);–2、VB不区分名字中字母的大小写(符号常量一般用大写字母定义)–3、不得超过255个字符;–4、不能使用VB的保留字;–5、同一作用域,不能重名。3.2.3常量的声明常量的声明符及其定义的位置不同,有效作用范围不同。分如下三种情况(三个作用域)。1、过程级常量(LOCAL局部),在过程中声明的常量,只能在该过程中使用,即有效作用范围是该过程。语法:Constconstantname[AsType]=expression–constantname是常量名;–Astype常量类型,如省略由所赋值确定常量类型;–expression由数值常数或字符串常数以及运算符组成,但不能使用函数调用。–过程内部直接用Const声明过程级常量。2、模块级常量(MOUDULE/FORM),在模块、窗体的“通用”声明的常量或过程中用“Private”声明的常量,在声明它的模块或窗体中的所有过程中可用。语法:[Private]Constconstantname[AsType]=expression–在通用中用Private或直接用Const声明窗体级常量3、全局级(工程级)常量(PUBLIC)在标准模块声明的常量,在工程的所有模块或窗体中都可用,语法:PublicConstconstantname[AsType]=expression–声明全局级常量必须在标准模块中声明,不能在窗体模块中声明!–Const关键字可定义多个符号常量,用逗号分隔:ConstconX=1,conY=50.01常量的声明举例Const语句定义数字:ConstconPi=3.14159265358979ConstconX=1,conY=50.01§3.3变量定义:在程序运行时用来保存临时数据的空间,所以也称内存变量。程序通过变量名来操作变量,变量具有名字(用来引用变量所包含的值的词)和数据类型(确定变量能够存储的数据的种类)。3.3.1变量命名规则VB的命名约定在编写VB代码时,要声明和命名许多元素(Sub和Function过程、变量、常数等等)。声明的过程、变量和常量的名字,必须遵循一定规则。变量命名规则同常量。–1、以字母开头,其后可以是字母、数字或下划线字符(不能包含英文标点符号、空格);–2、VB不区分名字中字母的大小写(符号常量一般用大定字母定义)–3、不得超过255个字符;–4、不能使用VB的保留字;•5、同一作用域,不能重名。3.3.2变量的声明变量的作用域决定了一个变量在什么代码范围内可以被访问。定义变量时使用的关键字以及定义变量的位置决定了变量的作用域。定义变量的声明符及变量定义的位置不同,其有效作用范围也不同,分为工程级、模块级、过程级三个作用域.1、过程级变量:局部变量,其作用范围最小,只限于本过程。用Dim或Static在过程内声明:Dim|StaticTempAsInteger–过程中的变量值对过程来说是局部的,也就是说,无法在一个过程中访问另一个过程中的变量。–在不同过程中可使用相同的变量名,而不必担心有什么冲突和意想不到的变故。2、模块级:在模块的“通用”-“声明”中声明Private|DimTempAsInteger–在本模块的各过程中都可以使用。3、工程级(全局)变量:在“通用”-“声明”中声明。PublicTempAsInteger–整个工程内都可以使用Dim和Static的区别:Dim定义的是动态过程变量,只在程序运行期间存在,不保留值。Static定义的是静态变量,程序模块运行结束仍存在,并保留值。Dim即可用于模块级变量的定义,也可用于过程级变量的定义;而Static只能定义过程级变量。打开【例3.1】使用过程级变量变量作用域举例:DimabcAsIntergerPrivateSubCommand1_Click()DimabcAsIntergerabc=abc+1PrintabcEndSubPrivateSubCommand2_Click()PrintabcEndSub变量的默认初值定义了一个变量,如果没为它赋初值,则–数值型的默认初值为0–逻辑型为False(值为0,非0为Ture)–变长字符型的默认初值是“”空串–固定长字符型的默认值是固定长的“”空格串–日期时间型#0:00:00#–对象型Nothing–变体EmptyPrivateabcAsIntergerStaticabcAsInterger强制变量定义VB默认情况下,所有未出现过的标识符,都被VB当成变体类型的变量。这样,使得程序不容易调试,可以在模块的声明段中加上:OptionExplicit–在“工具”菜单中选取“选项”,单击“编辑器”选项卡,再复选“要求变量声明”选项。这样就在任何新模块中自动插入OptionExplicit语句,但不会在已经建立起来的模块中自动插入;3.3.3变量的赋值在VB中赋值语句:[Let]变量名=表达式–Let旧版BASIC保留下来的,一般省略不写。–例:DimAAsIntegerA=100*20打开【例3.2】使用模块级变量打开【例3.3】为模块级变量赋初值3.3.4变量重名问题1.不允许同名的情况:一般情况下,在同一作用域内不能定义重名的变量。2.允许同名的情况:只要不发生冲突就可以。例:–不同过程中可以定义重名的过程级变量;–不同模块中可以定义重名的模块级变量;–等3.3.5字符串长度问题String变量或参数是一个可变长度的字符串。随着对字符串赋予新数据,它的长度可增可减。也可以声明字符串具有固定长度,避免VB经常调整长度。以下语法声明一个定长字符串:String*size例:声明一个长度为50字符的字符串DimEmpNameAsString*503.3.6Object对象型变量对象型变量,主要是针对VB中的多种控件对来使用。程序通过对象类型变量可间接地对它所引用对象进行操作。使用对象变量与使用常规变量一样,只不过多了把对象赋予变量这一步:首先声明变量:DimvariableAsclass然后把对象赋予变量:Setvariable=object在对象变量声明后,未赋值之前其默认值为Nothing3.3.7变体类型(Variant)变体类型变量可以存贮几乎所有系统定义类型的数据(除定长字符串、自定义类型)。把其它类型的数据赋给变体变量,变体变量的类型会随之变化。变体变量在存放数值时,占16字节的内存;存放字符串时,占用22字节的内存+字符串长度。定义变量时可以省略“AsVariant”。变体变量也可以引用对象,赋值时须使用Set语句。例:DimvntFirs(定义变体变量)vntFirst=1234(为数值型1234)SetvntFirst=cmdOK(对象型,对cmdOK的引用)3.3.8数据类型转换VB允许不同类型的变量之间相互赋值,也允许把不同类型的值赋予某种类型的变量,VB会自动将所赋予的值转换为被赋值的变量的类型。数值型转换:–浮点数转换为整型数时,小数部分“四舍五入”为整数(0.5要向最近的偶数靠拢)例:4.515;4.54;3.54;字符串与数值转换:–数值可转为字符串;–只有由纯数字,或包含合理的字母组成的字符串才可能转为数值,否则出现“类型不匹配”错误;如“1.2e3”1200。逻辑型值的转换:–赋给数值型变量,False转换为0,True转换为-1。–数值型变量的值赋给逻辑变量,0转换为False,非0转换为True。日期时间型的转换:–日期时间型变量赋给数值型变量时,日期部分转换为数值的整数部分,值为此日期距1899年12月30日的天数;时间部分转换为小数部分,从零时到该时间占一整天的比例,12:00:00转为0.5。–例:dtm3=#3/18/19996:00:00#:sng2=dtm3‘sng2的值为“36237.25”–日期时间型变量转换为字符串时,按照日期的短格式字符串。数据类型显示转换VB自动完成某些数据转换,为提高运行速度,我们通常使用CType()函数显式的转换。VB的转换函数包括:CBool转换为Boolean类型CByte转换为Byte类型CCur转换为Currency类型CDate转换为Date类型CDbl转换为Double类型CDec转换为Decimal型CInt转换为Integer类型CLng转换为Long类型CSng转换为Single类型CStr转换为String类型CVar转换为Variant类型