1.6 Access 2010中的数据
作为数据库管理系统,Access中的数据也有类型之分。在设计表的过程中,相应的字段必须使用明确的数据类型,同时操作数据库的过程中会随时使用表达式和函数。
1.6.1 字段的数据类型
Access 2010中定义了12种数据类型:文本、备注、数字、日期/时间、货币、自动编号、是/否、OLE对象、超链接、附件、计算、查阅向导。字段的数据类型及其说明如表1-15所示。
表1-15 字段类型及其说明
续表
1.6.2 表达式
表达式是各种数据、运算符、函数、控件和属性的组合,其运算结果是某个确定数据类型的值。表达式能实现数据计算、条件判断、数据类型转换等许多功能。在后续的内容中,许多操作如筛选条件、有效性规则、查询条件、计算控件等都要用到表达式。
1.运算符
运算符和操作数构成了表达式,运算符是用来表明运算性质的符号,它指明了多操作数进行运算的方法和规则。根据运算不同,Access中常用运算符有4种类型,即算术运算符、关系运算符、逻辑运算符和连接运算符。此外,还有特殊运算符和项目访问符。
1)算术运算符
算术运算符用于实现常见的算术运算,表1-16所示为常见的算术运算符及示例。
表1-16 常用的算术运算符及示例
续表
2)关系运算符
关系运算符用于比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True;若关系不成立,结果为False。关系运算及示例如表1-17所示。
表1-17 关系运算符及示例
关系运算的规则如下:
(1)数值型数据按数值大小比较。
(2)日期型数据按照日期的先后顺序比较,日期大则大,日期小则小。
(3)字符型数据按照字符的ASCII码值的大小从左到右一一比较,直到出现不同的字符为止。
3)逻辑运算符
逻辑运算符用于逻辑运算,主要有与(And)、或(Or)和非(Not)。逻辑运算符及示例如表1-18所示。
表1-18 逻辑运算符及示例
逻辑运算符的说明如下:
(1)运算结果为逻辑值True或False。
(2)优先级不相同:Not>And>Or。
(3)可用来描述复杂的关系表达式。
注意:在数学上表示某个数在某个区域时用表达式10≤X<20,在Access中应写成X>=10 And X<20,如果写成10<=X<20的形式则是错误的。
4)连接运算符
连接运算符用于字符串连接。常见的连接运算符有“+”和“&”两个运算符。
+(连接运算):两个操作数均应为字符串类型。当两个操作数都为数字时,它就变成了加法符号,执行加法运算;当两个操作数有一个是数字,另外一个是字符时,则会出现出错信息。
&(连接运算):两个操作数既可为字符型也可为数值型。当操作数是数值型时,系统自动先将其转换为数字字符,然后进行连接操作;当两个操作数都为字符串时,两个连接符等价。
连接运算符示例如表1-19所示。
表1-19 连接运算符示例
5)特殊运算符
特殊运算符及示例如表1-20所示。
表1-20 特殊运算符及示例
6)项目访问符
此外,Access中还有一种特殊的运算符,专门用于访问数据库对象及其所属控件属性,即叹号“!”和点号“.”,一般称其为项目访问符。使用格式为:
2.运算符的优先级
在一个表达式中进行若干操作时,每一部分都会按预先确定的顺序进行计算求解,称这个顺序为运算符的优先顺序。Access 2010中常用运算符的优先级划分如表1-21所示。
表1-21 常用运算符的优先级划分
运算符优先级说明如下:
(1)优先级:算术运算符>连接运算符>关系运算符>逻辑运算符。
(2)所有的关系运算符的优先级相同,也就是说,按从左到右顺序处理。
(3)算术运算符和逻辑运算符必须按表1-21中所列的优先顺序处理。
(4)括号优先级最高。可以用括号改变优先顺序,强令表达式的某些部分优先运行。
运算符优先级示例如表1-22所示。
表1-22 运算符优先级示例
1.6.3 函数
函数由事先定义好的一系列确定功能的语句组成,并最终返回一个确定类型的值。在后续的VBA模块实现中,也可以将一些用于实现特殊计算的表达式抽象出来自定义为函数,调用时,只需按相应的格式应用即可。Access中提供了近百个内置的标准函数,可以方便用户完成许多操作。
标准函数一般用于表达式中,有的能和语句一样使用。其使用形式如下:
其中,函数名必不可少,函数的参数放在函数名后的圆括号中,参数可以是常量、变量或表达式,可以有一个或多个,少数函数为无参函数。
使用函数一般要注意3个方面的内容,即函数名、参数和返回值。
(1)函数名起标识作用,根据名字可知其基本功能。
(2)参数就是函数名称后圆括号内的常量、变量、表达式和函数,使用时要理解其位置、类型、含义及默认值等。
(3)返回值就是函数运行后的结果,既要关注其类型,又要关注其具体值。
下面按分类介绍一些常用标准函数的使用。
1.算术函数
算术函数完成数学计算功能,主要包括以下算术函数:
(1)绝对值函数:Abs(<数值表达式>)。
功能:返回数值表达式的绝对值。例如:
(2)向下取整函数:Int(<数值表达式>)。
功能:返回数值表达式向下取整数的结果,参数为负数时返回小于等于参数值的第一个负数。例如:
(3)取整函数:Fix(<数值表达式>)。
功能:返回数值表达式的整数部分,参数为负值时返回大于等于参数值的第一个负数。例如:
(4)四舍五入函数:Round(<数值表达式>[,<表达式>])。
功能:按照指定的小数位数进行四舍五入运算的结果。[<表达式>]是进行四舍五入运算小数点右边应保留的位数,如果省略,则为0。例如:
(5)开平方函数:Sqr(<数值表达式>)。
功能:计算数值表达式的平方根。例如:
(6)符号函数:Sgn(<数值表达式>)。
功能:返回数值表达式的符号值。当数值表达式值大于0时,返回值为1;当数值表达式值等于0时,返回值为0;当数值表达式值小于0时,返回值为-1。例如:
(7)产生随机数函数:Rnd(<数值表达式>)。
功能:产生一个[0,1)的随机数,为单精度类型。如果数值表达式值小于0,每次产生相同的随机数;如果数值表达式值大于0,每次产生新的随机数;如果数值表达式值等于0,产生最近生成的随机数,且生成的随机数序列相同;如果省略数值表达式参数,则默认参数值大于0。例如:
2.字符串函数
(1)字符串检索函数:InStr([Start,]<Str1>,<Str2>[,Compare])。
功能:检索子字符串Str2在字符串Str1中最早出现的位置,返回一个整型数。Start为可选参数,为数值式,设置检索的起始位置。如省略,则从第一个字符开始检索;如包含Null值,则发生错误。Compare也为可选参数,指定字符串比较方法。值可以为1、2和0(默认)。指定0则作二进制比较,指定1则作不区分大小写的文本比较,指定2则作基于数据库中包含信息的比较。如值为Null,会发生错误。如指定了Compare参数,则Start一定要有参数。例如:
(2)字符串长度检测函数:Len(<字符串表达式>)。
功能:返回字符串所含有字符数。例如:
(3)字符串截取函数。
Left(<字符串表达式>,N):从字符串左边起截取N个字符构成的子串。
Right(<字符串表达式>,N):从字符串右边起截取N个字符构成的子串。
Mid(<字符串表达式>,<N1>,<N2>):从字符串左边第N1个字符起截取N2个字符所构成的字符串,如果N1大于字符串的字符数,返回零长度字符串;如果省略N2,返回字符串中左边起N1个字符串开始的所有字符。
例如:
(4)生成空格字符函数:Space(<字符表达式>)。
功能:返回数值表达式的值指定的空格字符数。例如:
(5)删除空格函数。
Ltrim(<字符表达式>):求字符串去掉左边空格后的字符串。
Rtrim(<字符表达式>):求字符串去掉右边空格后的字符串。
Trim(<字符表达式>):求删除前导和尾随空格符后的字符串。
例如:
(6)大小写转换函数。
Ucase(<字符表达式>):将字符串中小写字母转换成大写字母。
Lcase(<字符表达式>):将字符串中大写字母转换成小写字母。
例如:
3.日期/时间函数
(1)返回系统日期和时间函数。
Date():返回当前系统日期。
Time():返回当前系统时间。
Now():返回当前系统日期和系统时间。
(2)截取日期分量函数。
Year(<日期表达式>):返回日期表达式年份的整数。
Month(<日期表达式>):返回日期表达式月份的整数。
Day(<日期表达式>):返回日期表达式日期的整数。
WeekDay(<表达式>[,W]):返回1~7的整数,表示星期几。返回的星期常数如表1-23所示。在WeekDay()函数中,参数W可以指定一个星期的第一天是星期几。默认周日是一个星期的第一天,W的值为vbSunday或1。
表1-23 星期常数
例如:
(3)返回包含指定年月日的日期函数。
DateSerial(表达式1,表达式2,表达式3):返回指定年月日的日期,其中表达式1为年,表达式2为月,表达式3为日。
注意:每个参数的取值范围应该是可接受的;即日的取值范围应在1~31之间,而月的取值范围应该在1~12之间。此外,当任何一个参数的取值范围超出可接受的范围时,它会适时进位到下一个较大的时间单位。例如,如果指定了35天,则这个天数被解释成一个月加上多出来的日数,多出来的日数将由其年份与月份来决定。
例如:
4.类型转换函数
类型转换函数的功能是将数据类型转换成指定数据类型。
(1)字符串转换字符代码函数:Asc(<字符串表达式>)。
功能:返回首字符的ASCII码值。例如:
(2)字符代码转换字符函数:Chr(<字符代码>)。
功能:返回与字符代码相关的字符。例如:
(3)数字转换成字符串函数:Str(<数值表达式>)。
功能:将数值表达式值转换成字符串。注意,当一个数字转成字符串时,总会在前面保留一个空格来表示正负。表达式值为正,返回的字符串包含一个前导空格表示有正号。例如:
(4)字符串转换成数字函数:Val(<字符串表达式>)。
功能:将数字字符串转换成数值型数字。数字串转换时可自动将字符串中的空格、制表符和换行符去掉,当遇到不能识别为数字的第一个字符时,停止读入字符串。当字符串不是以数字开头时,函数返回0。例如:
(5)字符串转换成日期函数:DateValue(<字符串表达式>)。
功能:将字符串转换成日期值。例如: