第三章自由表(FreeTable)3.1表文件结构的建立和修改.......................................................................................................13.2表数据的输入...........................................................................................................................93.3表的打开、关闭、显示和定位.............................................................................................153.4记录数据的修改和删除.........................................................................................................213.5表的排序、索引和查寻.........................................................................................................293.6表的计算、汇总.....................................................................................................................443.7多表的关联、连接和更新.....................................................................................................483.8其它有关命令操作.................................................................................................................573.9结构化查询语言SQL..........................................................................................................62本章主要讲述用VFP的自由表().DBF文件工作,VFP数据库的使用见第七章的内容。3.1表文件结构的建立和修改3.1.1表的结构前面已经谈到VFP是关系数据库管理系统,它的一个表文件对应一张二维表,二维表中的数据项称为字段。字段名是数据项在表中的名称。表文件也是一个磁盘文件,文件的后缀名为.DBF。所有字段中的数据根据其特点和对操作的要求可以分成几种类型,有的要确定字段的宽度,数值型和浮点数值型等还要确定小数位的位数。建立表前必须定义表结构,即必须明确该表所包含的字段及其字段名、字段类型、字段宽度、小数位数。表结构与相应的数据构成了表文件。VFP的一个表可以包含255个字段。下面叙述数据结构的几个部分。1.字段名假如建立一个文献档案(文档)表,包含的数据项有:登录号、登录时间、关键词、行文者号、文档名、行文者名、行文地、登出刊物、行文时间、页数、涉及金额、该文处理情况、摘要,我们可以直接用项目的汉字名称作为表的字段名,也可以用项目的汉语拼音或英文缩写等其它符号作为字段名。对于某一件具体文档情况的基本情况数据,如“8001,01/01/91,合同,0010,关于销售FoxHT(Rev.1.0)星级酒店网络管理信息系统软件的协议,成都小狐狸软件实验室,(028)88824788,19901225,2页,0,协议待签,要求安装及培训等”,按照各字段的格式送入表就组成该表中的一个记录,成都小狐狸软件实验室就是行文者名这个字段的内容。所有的文档记录就构成文档表文件。字段名必须以字母或汉字开头,长度一般不超过10个字符(第七章中所说的.DBC库中表的长字段名是另一种情况),一个汉字算两个字符。字段名除了开头必须是字母或汉字外,其它可以是字母、汉字、数字和下划线“__”。例:国庆,NA国,GJ,课题_1,都是正确的字段名。“2百号”、“C:FILE”,都不是正确的字段名。2.字段类型在VFP,字段类型主要有14种。一个字段只允许存放一种类型的数据。(1)字符型字段(C):即Character字段,可逐字存贮所有能打印的ASCⅡ字符及空格符,不以作结束符,还包括所有汉字系统的可打印的汉字和各种符号,即任何文本(Text)。通常字符字段存贮名字、地址和其它简单文本。象电话号码和邮编这类数据,虽然大部份为数字,但作为字符值保存会更有利于保存。(2)数值型字段(N):即Numeric字段,用以存贮可参与加减乘除运算的为0123456789(负数)等数值的数据。如:123456789,-123456789,0.1234等,整数或小数。(3)浮点数值型字段(F):即Float或叫浮动型字段,与N型字段相同,是数值类型,以ASCⅡ码形式表示,均以IEEE(InstituteofElectricalandElectronicsEngineers)所描述的二进制浮点表示型式存贮。在FoxPro2.5之前的版本没有此表示型,为了与dBASEIV兼容(主要是为了解决舍入的误差问题),Fox系统增加了浮点数据型到FoxPro。N型和F型数据在内存中均使用相同的数值表示,并且都使用同样等价的运算操作。尽管没有多大差别,但还是建议:数值型(Numericdata)用于一般计算账目等方面的应用程序,而浮点数字型(Floatdata)用于科学运算应用程序(因它要求精确运算)。浮点数值型数据值的范围是:-.9999999999E+19到.9999999999E+20。(4)双精度数据型字段(B):即Double字段,当用户需要更精确的数值时,可用双精度数据代替数值型数据(Numeric)。Double数据型是真正的浮点数(双精度的),它的固定范围是:+/-4.94065645841247E-324到+/-8.9884656743115E307。在表中,不象Numeric数值型数据,输入值时必须确定小数点的位置。双精度数据一般用于科学计算。(5)整数型字段(Integer):装入整数值。使用没有小数值的整数字段,对性能和表的存贮作一定的限制是有其特殊意义的。在表中,整数型字段是以4个字节的二进制值存贮的,所以它比另外的数值型要求较少的内存空间,并且作为二进制值也不需要ASCII码转换。整数型数据值的范围是-2147483647至2147483647。(6)货币型字段(Y):即Currency字段,它装入表示货币量的数据而代替用数值型(Numeric)数据表示货币。它的值的范围是-922337203685477.5807至922337203685477.5807。小数位超过四位则四舍五入。值的前面应有美元符号“$”。如$388.88等。当在字段、Browse(浏览)窗口等中显示时,货币型字段服从系统设置(例如SETCURRENCY),详见联机帮助(Help)。(7)逻辑型字段(L):即Logical字段,用以存放真或假两个逻辑值。输入T(t)或Y(y)为真,输入F(f)或N(n)为假。如,姓别:男或女,婚姻:真或假。(8)日期型字段(D):即Date字段,用以存贮不带时间值的日期数据,可反映日期格式,可检查日期输入合法性。VFP规定输入和显示的默认格式为YYYYMMDD,对应年月日(年取4位)。在VFP,可用SETDATE等命令改变为YY.MM.DD等多种格式。日期型字段可进行日期运算。如:04/25/99,19950101,96.10.01等。(9)日期时间型字段(T):即DateTime字段,既可以存贮日期,也可以存贮时间或者两者兼有的值。日期时间型数据的值是以“yyyymmddhhmmss”字符格式存贮的,即年月日时分秒的形式。如果用户没有指定日期值,VFP则加一个缺省值December30,1899。后四个字节放时间,该时间从午夜起计算以百分之一秒为最小计时单位。如果没有指定时间值,VFP则加一个午夜(midnight)的缺省时间值,日期时间值是包含在括号中的。如:{4/17/9607:40am},{10:00am}。括号中只含有冒号为空值,如{:}。日期时间型数据的日期部分的格式如同日期型(Date)数据一样取决于SETDATE,SETMARK,和SETCENTURY的设置。时间部分的格式取决于SETHOURS和SETSECONDS的设置(关于这些设置的详情,见联机帮助Help)。在日期(Date)和日期时间(DateTime)型数据中,都遵循如下规则:{00:00:00AM}与{12:00:00AM}午夜等效。{00:00:00PM}与{12:00:00PM}中午等效。{00:00:00}到{11:59:59}与{12:00:00AM}到{11:59:59AM}等效。{12:00:00}到{23:59:59}与{12:00:00PM}到{11:59:59PM}等效。(10)备注型字段(M):即,Memo字段,用以存贮大量的文字信息,备注字段VFP可任意长,只受现存的磁盘空间限制。表文件中如果包含备注字段,则该表除了表文件外,还有一个与表文件同名扩展名为“.FPT”的备注型文件,用来存放备注型字段应有的所有内容,而备注型字段本身只存放其内容的地址。因此备注型字段除了能进行编辑、显示和打印外,不能进行其它操作。它是不定长度的长字符串输入,如:报告、文章、备注说明等。(11)通用型字段(G):即General字段。它类似一个备注型字段,但主要用来支持Microsoft的对象链接和嵌入OLE(Objectlinkingandembedding)。通用数据型字段的内容也存贮在所分配的.FPT备注文件中,它可以包括任何类型的链接或嵌入的对象。比如,可以链接或嵌入任何文本、图象、照片、声音、图表、二进制文件或由支持OLE的应用程序所建立的其它对象进入通用数据型字段。通用型字段也是除了能进行编辑、显示或打印等外,不能进行其它操作。如何将这些对象进入通用型字段,详见13.2节的内容。(12)二进制字符型字段:即Character(binary)字段。它可装入想维持的不用通过代码页转变的任何字符数据。它的值的范围是任何字符。例如:保存在表中的用户密码,用于不同的国家(地区)。(13)二进制备注型字段:即Memo(Binary)字段。它可装入想维持的、不用通过代码页转变的任何备注字段数据。它的范围仅受现存内存限制。例如:用于不同国家(地区)的登录脚本。(14)整数(自动增量)型:即Integer(Autoinc)字段,类似于整数型字段,但又是一个自动增加值的字段,只读型。其值由NEXT(下值)和STEP(步长)值控制(详见下节)。一般用来作关键字。3.字段宽度字符型字段不得大于254个字符,超过254个字符的文本用备注型字段的备注文件存贮。浮点型(F)和数值型字段(N)的宽度=整数位数+小数位数+1(小数点),其字段宽度不能超过20字节,有效位数为16位。其它几个类型的字段宽度是系统规定的,不须用户设定:逻辑型字段宽度为1,日期型、日期时间型、货币型、双精度数据型字段宽度为8;备注型、通用型、整数型以及二进制备注型(Binary)字段宽度为4。二进制字符型(Binary)为1到254个字节。4.小数位若字段的类型是数字型(N)和浮点型(F),就须给出小数位数,若是整数,小数位是0,小数部分的长度是总长的一部分,其小数位不能大于19。双精度小数位不能大于18,它不象数值型数据,当输入值时,