第2章VisualFoxPro基础知识本章要点1.VisualFoxPro命令的格式与书写规则2.文件类型3.数据类型4.数据存储5.表达式6.函数VisualFoxPro功能异常强大,拥有近500条命令。且其命令比一般程序设计语言中的语句更加精练、功能更强。掌握一些常用命令,可以使操作更方便、快捷、高效。本节介绍VisualFoxPro命令的一般格式及其书写规则。(1)VisualFoxPro的命令格式一条命令通常由命令动词和若于个短语组成。命令动词表明该命令执行什么操作,短语用于说明命令的操作对象、操作条件等,短语有时又称为子句。VisualFoxPro命令的典型格式为:命令动词[表达式表][范围][FOR条件][WHILE条件][TOFILE文件名|TOPRINTER|TO内存变量]1.VisualFoxPro命令的格式与书写规则1)命令格式中各符号的含义:必选项[]:可选项,视具体使用要求由用户选择|:在由它所分隔的各项中选择其一...:表示此部分可以类似方法重复多次【例】LIST学号,姓名,性别FORYEAR(出生日期)=1986TOPRINTER2)命令格式中各部分功能①命令动词例如LIST,USE,COUNT等。②表达式表,由一个或多个逗号分隔。如:姓名+STR(总分)也是一个表达式。③范围它指定命令可以操作的记录集合。范围可有下列四种选择:ALL、NEXTn、RECORDn、REST④FOR条件它规定只对满足条件的记录进行操作,如果使用FOR子句VisualFoxPro将记录指针重新指向表文件顶,并且用FOR条件与每条记录进行比较。上例中的FORYEAR(出生日期)=1986子句,表示只选择出生日期为1986年的学生记录进行操作。⑤WHILE条件在表文件中,从当前记录开始,按记录顺序从上向下处理,一旦遇到不满足条件的记录,就停止搜索并结束该命令的执行,在FOR子句和WHILE子句中,条件必须返回逻辑值。⑥TOFILE文件名|TOPRINTER|TO内存变量它控制操作结果的输出,TOFILE文件名命令允许结果向文件输出;TOPRINTER命令允许操作结果向打印机输出;TO内存变量命令允许操作结果向内存变量输出。(2)VisualFoxPro命令的书写规则在VisualFoxPro中,命令的书写(或输入)规则相当灵活、方便,主要有以下几点:1)命令动词必须写在命令的最前面,而各短语的前后顺序可以任意排列。例如,下面两条命令的执行结果完全一样:LIST学号,姓名,性别FORYEAR(出生日期)=1986LISTFORYEAR(出生日期)=1986学号,姓名,性别2)命令动词与短语之间、短语与短语之间、短语的各部分之间(如短语NEXT3的NEXT与3之间,短语FOR性别=女的FOR与性别=女之间)必须用空格分隔开。3)命令动词、各短语中的保留字及函数名在不至于引起混淆的情况下可以简写为前4个字符,而且英文字母大小写等效。例如,DISPLAY可以写成DISP或disp,但LOCAL与LOCATE则应注意。显然,大量使用简写必然会降低可读性,建议适量使用简写为佳。4)一条命令的长度可达8192个字符。当一行写不下时,可在适当位置输入续行符;并按回车键换行,继续输入该命令。2.文件扩展名与文件类型下表列出了VisualFoxPro常用的文件扩展名及其关联的文件类型与含义。扩展名文件类型.dbc/.dct/.dcx数据库/数据库备注/数据库索引.dbf/.fpt表/表备注.prg/.fxp程序/编译后的程序.exe/.err可执行程序/编译错误.frx/.frt报表/报表备注.cdx/.idx复合索引/简单索引,压缩索引.mnx/.mnt/.mpr/.mpx菜单/菜单备注/生成的菜单程序/编译后的菜单程序.scx/.sct表单/表单备注.mem内存变量文件.pjx/.pjt项目/项目备注.qpr/.qpx查询程序/编译后的查询程序3.数据类型数据是反映客观事物属性的记录。通常分为数值型和字符型两种基本类型。数据类型一旦被定义,就确定了其存储方式和使用方式。VisualFoxPro系统为了使用户建立和使用数据库更加方便,将数据细化分为以下几种类型。(1)字符型字符型数据描述不具有计算能力的文字数据类型,是最常用的数据类型之一。字符型数据(Character)是由汉字和ASCII字符集中可打印字符(英文字符、数字字符、空格及其他专用字符)组成,长度范围是0~254个字符。数值型数据通常分为以下四种类型:1)数值型数值型数据(Numeric)是由数字(0~9)、小数点和正负号组成。最大长度为20位(包括+、-和小数点)。2)浮点型浮点型数据(Float)是数值型数据的一种,与数值型数据完全等价。浮点型数据只是在存储形式上采取浮点格式。3)双精度型双精度型数据(douBle)是更高精度的数值型数据。它只用于数据表中的字段类型的定义,并采用固定长度浮点格式存储。4)整型整型数据(Integer)是不包含小数点部分的数值型数据。它只用于数据表中的字段类型的定义。整型数据以二进制形式存储。(2)数值型(3)货币型货币型数据(currencY)用于表示货币型的量。(4)日期型日期型数据(Date)是用于表示日期的数据,用默认格式{mm/dd/yyyy}来表示。其中mm代表月,dd代表日,yyyy代表年,长度固定为8位。(5)日期时间型日期时间型数据(dateTime)是描述日期和时间的数据。其默认格式为{mm/dd/yyyyhh:mm:ss}。其中yyyy代表年,前两个mm代表月,dd代表日,hh代表小时,后两个mm代表分钟,ss代表秒,长度固定为8位。(6)逻辑型逻辑型数据(Logic)是描述客观事物真假的数据,用于表示逻辑判断结果。逻辑型数据只有真(.T.)和假(.F.)两种值,长度固定为1位。(7)备注型备注型数据(Memo)用于存放较长的字符型数据类型。可以把它看成是字符型数据的特殊形式。备注型数据没有数据长度限制,仅受限于现有的磁盘空间。它只用于数据表中的字段类型的定义,其字段长度固定为10位,而实际数据被存放在与数据表文件同名的备注文件中,长度根据数据的内容而定。通用型数据(General)是用于存储OLE对象的数据。通用型数据中的OLE对象可以是电子表格、文档、图片等。它只用于数据表中的字段类型的定义。OLE对象的实际内容、类型和数据量则取决于连接或嵌入OLE对象的操作方式。如果采用连接OLE对象方式,则数据表中只包含对OLE对象的引用说明,以及对创建该OLE对象的应用程序的引用说明;如果采用嵌入OLE对象方式,则数据表中除包含对创建该OLE对象的应用程序的引用说明,还包含OLE对象中的实际数据。通用型数据长度固定为4位,实际数据长度仅受限于现有的磁盘空间。(8)通用型4.数据存储在VisualFoxPro系统环境下,数据输入、输出是通过数据的存储设备完成的。通常我们都是将数据存入到常量、变量、数组中,而在VisualFoxPro系统环境下,数据还可以存入到字段、记录和对象中。我们把这些供数据存储的常量、变量、数组、字段、记录和对象称为数据存储容器。(1)常量常量是一个命名的数据项,是在命令或程序中直接引用的实际值,其特征是在所有的操作中其值不变。常量有以下六种。1)数值型常量(浮点型常量:是数值型常量的浮点格式)由数字(0~9)、小数点和正负号组成。例如12、3.45、-1.678、2E-5、3.4E3等。2)货币型常量货币型常量以符号$开头,小数部分若超过4位,则四舍五入取4位小数。例如,$518,$22.18等。3)字符型常量由汉字和ASCII字符集中可打印字符组成的字符串,使用时必须用定界符括起来。例如,计算机,'123',[数据],['IBM'PC]。注意:不包含任何字符的字符串()叫空串,它与包含空格的字符串()不同。4)逻辑型常量由表示逻辑判断结果“真”或“假”符号组成。逻辑真的常量表示形式有:.T.、.t.、.Y.和.y.;逻辑假的常量表示形式有:.F.、.f.、.N.和.n.,但系统将一律接收为.T.或.F.。前后两个句点作为逻辑型常量的定界符是必不可少的,否则会被误认为变量名。逻辑型数据只占用一个字节。5)日期常量用于表示日期,日期型常量的格式有两种:传统的日期格式系统默认的日期型数据为美国日期格式(mm/dd/yy,月/日/年),传统日期格式中的月、日各为2位数字,而年份可以是2位数字,也可以是4位数字。这种格式的日期型常量要受到命令语句SETDATE和SETCENTURY设置的影响,也就是说,在不同的设置状态下,计算机会对同一个日期型常量做出不同的解释。严格的日期格式{^yyyy-mm-dd},用这种格式书写的日期常量能表达一个确切的日期,它不受SETDATE等语句设置的影响。6)时间日期型常量用于表示时间日期,其规定格式以{^yyyy/mm/ddhh:mm:ss}表示,如{^2002-08-2,11:30P},{^2001-10-1,3}。常量可以在VisualFoxPro的命令窗口中通过以下命令创建或释放:#DEFINE常量名常量值&&常量的创建#UNDEF常量名&&常量的释放常量名是指以字母或下划线开始,后面可以跟任意个字母或数字的字符串。如X1、CONST_1等(注意:在VisualFoxPro的常量名中字母的大小写具有同样含义)。常量值是指常量名所代表的数值。例如:#DEFINEPI3.14159一但通过#DEFINE常量名常量值命令定义了一个常量名后,则在以后的应用中可以用此常量名代表常量出现,但不能对符号常量重新赋值,直到遇见#UNDEF常量名命令释放定义或程序结束为止。在命令操作或程序执行过程中,其值可以改变的量称为变量。VisualFoxPro的变量分为字段变量和内存变量两大类。由于表中的各条记录对同一个字段名可能取值不同。因此,表中的字段名就是变量,称为字段变量。内存变量是内存中的一个存储区域,变量值就是存放在这个存储区域里的数据,变量的类型取决于变量值的类型。在VisualFoxPro中,变量的类型可以改变,也就是说,可以把不同类型的数据赋给同一个变量。1)内存变量内存变量又分为用户定义的内存变量(通常简称内存变量)和系统内存变量(通常简称系统变量),此外,还可以使用数组,它是按一定顺序排列的内存变量。内存变量与字段变量不同,它独立于数据库文件而存在,用来保存在命令或程序执行中临时用到的输入、输出或中间数据,由用户根据需要定义或删除。(2)变量每一个变量都有一个名字,称为变量名,可以通过变量名访问变量。内存变量命名规则有3条:.以字母、汉字或下划线开头;.由字母、汉字、下划线或数字组成;.长度不超过128个字符。例如,X1、姓名、XM、Name、name_23、_my2002等都是合法的内存变量名。内存变量的数据类型包括字符型(C)、数值型(N)、货币型(Y)、逻辑型(L)、日期型(D)、日期时间型(T)和S(屏幕型)7种,其类型与所赋值的类型一致。①简单内存变量内存变量是内存中的临时单元,当退出VisualFoxPro系统后,内存变量也会与系统一起消失,除非使用内存变量文件来保存内存变量值。在VisualFoxPro中,简单内存变量的赋值和输出,可以使用STORE、=或?命令进行。数组是一组有序内存变量的集合。或者说,数组是由同一个名字组织起来的简单内存变量的集合,其中每一个内存变量都是这个数组的一个元素,它是由一个以行和列形式表示的数组元素的矩阵。所谓的数组元素是用一个变量名命名的一个集合体,而且每一个数组元素在内存中独占一个内存单元。为了区分不同的数组元素,每一个数组元素都是通过数组名和下标来访问的。与简单内存变量不同,数组在使用之前一般要用DIMENSION或DECLARE命令创建,规定数组是一维数组还是二维数组,数组名和数组大小。数组大小由下标值的上、下限决定,下限规定为1。创建数组的