1、3.1 数据库文件的建立和数据的输入 3.2 数据库的打开、 关闭、 显示及记录指针3.3 数据库数据的增、 删、 改 3.4 字段存取控制与记录过滤器,第 3 章数据库的基本操作,返回主目录,第 3 章 数据库的基本操作,3.1数据库文件的建立和数据的输入3.1.1建立数据库的准备工作利用FoxPro解决实际应用问题时,准确、恰当地建立数据库是至关重要的。为此,需要作好下列建立数据库的准备工作。 1. 对实际业务的调研充分调查用户业务的处理过程和相关的数据流程,了解用户对使用计算机进行业务处理的需求,确定满足用户需求所涉及的数据项目、类型、长度和精度。,2. 数据库的逻辑设计一般作法是, 把
2、与实际业务有关的数据项, 划分为若干个数据库。 确定每个数据库的文件名和数据库结构的个要素(字段名、 类型、 长度、 精度),即绘制出各数据库逻辑结构的二维表。 例如,为了进行人事管理, 需要建立一个人事档案数据库, 为此第一步:进行业务现状和业务处理的需求调查; 第二步:数据库的逻辑设计,绘制出如下的数据库结构表:,数据库文件名: RSH.DBF,3.1.2 建立数据库文件根据数据库的逻辑设计, 指定各个数据库文件的存取路径, 在指定的路径下,分别建立数据库的磁盘文件,即进行数据库的物理设计。 在FoxPro系统环境下建立数据库文件时,可以在命令窗口中使用命令方式,也可以利用系统菜单,使用选
3、单方式。 1. 使用命令方式建立数据库文件命令格式:CREATE路径数据库文件的主名,如果命令中不指定所要建立的数据库文件的主名, 则最后将数据库文件存盘时,系统会要求用户给出数据库文件名, 对于所建立的数据库文件,系统将自动附加扩展名 .DBF。 如果命令中不指定数据库文件的存储路径,则所建立的数据库文件存入默认目录下。 FoxPro系统的默认目录是存储FoxPro系统文件的目录, 一般是C:FOXPROW。 在单用户微机的环境下,把数据库建立在FoxPro系统文件所在的目录是允许的。但是,如果使用网络终端,因为一般终端用户对C:FOXPROW目录没有文件写入权限,所以网络终端用户建立数据库
4、文件时, 必须指定用户可存取目录的路径。 现以建立人事档案数据库文件为例,说明使用命令方式建立数据库文件的操作方法。为此,在命令窗口打入建立人事档案数据库文件的命令: ,CREATE D:rsh 回车此时, 屏幕立即出现建立数据库结构的Table Structure对话框(见图3.1)。在该对话框中, 按数据库的逻辑设计, 依次输入字段名、 类型、 宽度、小数位。输入字段类型时, 只能单击类型列表框右端的箭头, 从类型列表中选择一种类型;字段宽度和小数位数可以用键盘打入,也可以通过用鼠标单击数码器的上、 下箭头设定。 字段实际上是一种变量,叫做字段变量,它代表了关系型数据库中的一列数据。 字段
5、变量属多值变量,数据库文件中有多少条记录, 其字段变量就具有多少个值。字段变量的取值随当前正在操作的记录(称为当前记录)的变化而变化。 字段变量的名称最多使用个ASCII符号或个汉字表示。,字段变量有以下种类型: (1) 字符型字段(Character型):用于存放字符型数据。字符型字段的最大长度是254个字节,可存储254个半角字符或127个全角字符。 (2) 数值型字段(Numberic型):用于存放数值型数据。 数值型字段允许的最大宽度为20个字节。用户实际使用的宽度和精度由用户在建立数据库时指定。 另外,FoxPro还提供了一种叫做浮点型的字段(Float型)。数值型常量和数值型内存变
6、量并不区分型和型, 只是在数据库的字段类型中分为型和型。 两者在 FoxPro系统内部使用没有区别,只是在转换成供其它高级语言使用的数据格式时,型数据比型数据的精度要高。 ,(3) 日期型字段(Date型):用于存放日期型数据。 日期型字段具有固定的宽度, 默认宽度为8个字节, 年、 月、 日各用两个数字表示。如果用户用命令: SET CENTURY ON设置了位年号后, 数据库结构中日期型字段的宽度仍为个字节, 但是输入和使用的年号已经是位数字了。 (4) 逻辑型字段(Logical型): 用于存放逻辑型数据。 逻辑型字段具有固定的长度, 即个字节。 (5) 备注型字段(Memory型):
7、用于存放一种特殊的数据。我们知道字符型数据最多只能存储254个字节的字符, 但在实际应用中有时需要存储更多的字符, 备注型字段正是为此而设置的。,宽度固定为个字节, 用于存放一个指针。 该指针用于指向一个和数据库文件同名、 扩展名为 .FPT的文件。 在这个 .FPT文件中, 每个备注型字段的存储容量可达 。 (6) 通用型数据(General型): 用于存放图像、 电子表格、声音等多媒体对象。 通用型字段宽度固定为个字节, 如同型字段,它仅仅存放一个指针。 该指针指向和数据库文件同名、扩展名为.FPT的文件。 在该文件中, 存放着对应的多媒体对象的具体内容。 如果某个字段的类型选择了型或型,
8、 则除了建立数据库文件(.DBF文件)之外,还同时生成一个主名和数据库文件主名相同的 .FPT文件,专门用于存储型和型数据。 在这种情况下, 如果丢失了和数据库文件对应的 .FPP文件,则数据库文件将不能使用。所以,当复制数据库文件时,必须连同对应的 .FPT一起复制。,注意: 每当一个项目输入完毕后不要用回车键, 而是用鼠标或用箭头键指向下一个输入项目。 若用鼠标单击某一输入项,可以对该项目已经输入的内容进行修改; 若需要插入字段,则用鼠标选中字段插入位置, 再单击Field框内的“Insert”按钮;若要删除已经输入的字段, 则用鼠标选中要删除的字段后,再单击Field框内的“Delete
9、”按钮。 输入或修改结束后,按Ctrl+W键,或者单击“OK”按钮, 即可存盘并返回到FoxPro系统;如果单击“Cancel” 按钮, 则将放弃本次建库操作并返回FoxPro系统。 当所建立的数据库文件存盘返回FoxPro系统时, 出现一个系统询问是否转入数据输入操作的对话框, 这里我们暂时不进行数据输入操作。 ,2. 使用选单方式建立数据库文件用鼠标单击FoxPro系统菜单中的File, 在其下拉菜单中选择New.。 此时, 出现New对话框(见图3.2),该对话框中File Type区列出了各种文件的类型。为建立数据库文件, 从中选择的类型应当是Table/DBF,单击“New”按钮之后
10、也出现如图3.1的对话框, 后续操作同命令方式。 用选单方式建立数据库文件时, 其操作顺序是先建立数据库结构, 后指定文件名和存储路径。所以,当退出数据库结构的输入窗口后, 立即出现指定文件名及其存储路径的“Save As”对话框(见图3.3)。 ,在Save As对话框的磁盘驱动器列表框Drive中选择一个目标磁盘;在目录列表框Directory中选择一个目标目录;在Save Table As 下的文本框中输入所建立的数据库文件的主名。当完成数据库文件名及存储路径的指定之后,单击对话框中的“Save”按钮,则存盘返回到FoxPro系统;单击Cancel按钮,则放弃存盘返回到FoxPro系统。
11、 注意: 用选单方式建立数据库文件时,因为操作过程是先输入数据库结构后指定文件的存储路径,所以当在图3.2所示的New对话框中选择了文件类型并单击“New”按钮后,系统认为用户企图在默认目录C:FOXPROW下存储文件。 所以,在网络终端环境下, 不能使用选单方式建立数据库。 ,3. 使用复制数据库结构的方法建立库文件利用已经建成的数据库文件,用数据库结构复制的方法, 可以建立其它数据库文件。为此,需要使用数据库结构的复制命令: COPY STRUCTURE TO 路径新库文件名 FIELDS 新库的字段名表例如, 设数据库Rsh.dbf刚刚建立(处于打开状态), 可用数据库结构复制的方法分别
12、建立名为Rsh1.dbf、 Rsh2.dbf的两个数据库文件。 要求Rsh1.dbf具有姓名、性别、工资等个字段; Rsh2.dbf具有姓名、性别、出生日期、技术等级等个字段。 在命令窗口打入生成Rsh1.dbf结构的命令: ,COPY STRUCTURE TO D:rsh1 FIELDS 姓名,性别,工资在命令窗口打入生成Rsh2.dbf结构的命令: COPY STRUCTURE TO D:rsh2 FIELDS 姓名,性别,出生日期,技术等级不难验证, 执行了上面的命令之后, 在盘的根目录下确实出现了Rsh1.dbf和Rsh2.dbf两个文件。 ,3.1.3 数据库结构的修改当结束建立数据
13、库结构的操作之后, 还可以对其结构进行修改。修改数据库结构的操作也分为命令方式和选单方式。 1. 命令方式命令格式: MODIFY STRUCTURE此命令执行后,出现和图3.1类似的Table Structure对话框。 先用鼠标或用Tab键、箭头键选中修改对象,再进行修改操作。 修改完后, 按Ctrl+W键或单击“OK”按钮存盘退出;按Esc键或单击Delete按钮,则放弃修改。,2. 选单方式单击系统菜单中的Database,在其下拉菜单中选择Setup., 出现Setup对话框(见图3.4),单击“Modify”按钮,出现和图3.1类似的Table Structure库结构修改窗口,后
14、续操作同命令方式。 ,3.1.4用键盘向数据库输入数据1. 退出建库操作并转入数据输入退出建库操作后, 对于系统询问: Input data record now? 若选择Yes,则出现数据库记录输入窗口(见图3.5),用户可在此窗口输入数据库的数据; 若选择No,则完成建库后不转入输入数据的操作, 待以后用专门的命令输入数据。 数据输入窗口显示出一条记录的字段名及各个字段对应的数据输入区, 用户可以依次在各个字段的数据输入区键入对应的数据。 当输入的数据达到字段所能接收的数据宽度时, 自动转向下一个字段的输入;,如果所输入的数据宽度少于字段宽度时,应当用回车键结束当前字段的输入并转入下一个输
15、入字段,也可以用鼠标单击下一个输入字段。其中,M型字段已经显示memo, G型字段已经显示gen,表明这两种字段数据需要使用特殊的方法输入数据, 后面将专门介绍这两种类型数据的输入方法。 对已经输入的数据,可以修改。修改的方法是: 用箭头键指向或用鼠标单击需要修改的输入项,使其成为当前输入项, 重新输入正确的数据。 当结束数据输入时,可以用下列任意一种方法将输入的数据存盘并关闭数据输入窗口,返回到FoxPro系统: (1) 按Ctrl+W键; (2) 按Esc键; (3) 按Ctrl+Q键; ,(4) 单击输入窗口标题左端的控制按钮, 从其下拉菜单中选择退出命令。 在数据输入过程中,FoxPr
16、o是以字段为单位写入数据库文件对应的内存缓冲区的,所以当一个字段的输入是以回车键结束或用箭头键指向了下一个字段或用鼠标单击下一个字段后, 所输入的字段值,就已经存入了数据库文件的内存缓冲区。 此时,不论使用哪种方法退出输入窗口, 都不会丢失已经输入的数据。 2. 向数据库追加记录的命令命令格式: APPENDE BLANK执行该命令, 打开和图3.5相同的数据库数据输入窗口, 以便用户向当前数据库输入数据。,APPENDE命令总是从数据库中最后一条记录的后面追加新的记录。 APPENDE命令激活数据输入窗口后,可以连续追加多条记录的数据, 如果要停止数据的输入,则使用上述退出数据输入窗口的一种
17、方法, 终止APPENDE命令的执行并返回到FoxPro系统。 该命令如果选用BLANK,则不激活数据输入窗口, 仅从数据库后面追加一条空记录,供以后再用其它命令向各个空字段输入数据。 3. 型、 型数据的输入1) M型数据的输入型字段的数据是存入扩展名为 .FPT文件的。 型数据的输入、 输出, 都是在型数据的输入、输出窗口内进行的。,当型字段成为当前操作对象时,选用下列的任意一种操作,都能进入型字段数据的输入、输出窗口: (1) 用鼠标双击型字段。 (2) 按复合键Ctrl+PageDown或Ctrl+PgDn或Ctrl+Home。 当输入或编辑结束后,按Ctrl+W键可将M型字段数据存入
18、 .FPT文件并返回到数据输入窗口。 2) 型数据的输入型字段的数据是存入扩展名为.FPT文件的。由于FoxPro本身不具备生成多媒体数据的功能, 所以需要事先用其它软件准备好多媒体数据,然后再写到型字段对应的.FPT文件中。 多媒体数据可用Word、 Excel及画笔等多媒体写作软件生成。,常用的型数据输入方法有以下两种: (1) 插入对象。双击型字段或按Ctrl+PageDown键, 进入型字段输入窗口; 单击系统菜单Edit,从下拉菜单中选择Insert Object.(插入对象),激活Insert Object窗口(见图3.6); 从Insert Object窗口中的Object Ty
19、pe框选择需要插入的多媒体文件类型; 所选文件类型将自动激活一种具有制作多媒体信息功能的软件,在所激活的软件环境下,制作或打开需要插入的多媒体文件; ,插入的多媒体信息将显示在型数据输入窗口, 按Ctrl+W键, 存入 .FPT文件并返回到数据输入窗口。 (2) 利用剪贴板。 启动某一多媒体制作软件; 制作或打开多媒体文件,从中选择剪贴对象并剪贴到剪贴板; 回到FoxPro的数据输入窗口,置型字段为当前输入字段; 鼠标双击型字段或按Ctrl+PageDown键, 进入型字段输入窗口; 单击系统菜单Edit, 从下拉菜单中选择Paste(粘贴), 则在型字段输入窗口出现通过剪贴板传送来的多媒体数
20、据;,3.1.5从其它数据库向当前打开的数据库追加记录 如果两个数据库具有一些相同的字段名和属性, 则可以把一个数据库(源库)中的数据追加到另一个数据库(目标库)中。 为此, 需要使用从一个数据库向当前打开的数据库追加记录的命令。 1. 命令格式APPEND FROM WB路径源数据库文件名FIELDS 字段名表 FOR 条件为了说明APPEND FROM命令的使用方法, 先举一个使用了APPEND FROM命令的例子。 ,例 3.1 设有和人事档案数据库(Rsh.dbf)结构相同的两个数据库Rsh1.dbf、 Rsh2.dbf, 并且 Rsh.dbf中有以下条记录:,姓名 性别 出生日期 婚
21、否 技术等级 工资 简历 图片 朱宪佐 男 07/21/65 .T. 9 432.50 张俐荣 女 09/10/54 .T. 8 521.00 Rsh1.dbf中有以下条记录: ,姓名 性别 出生日期 婚否 技术等级 工资 简历 图片 宋卫星 男 11/21/65 .T. 9 432.50 钱小荣 女 09/10/54 .T. 8 521.00 王德明 男 04/27/76 .T. 11 345.21 朱福彦 男 10/28/45 .T. 5 754.50 赵四蔓 女 06/15/46 .T. 6 687.49,Rsh2.dbf中有以下条记录: 姓名 性别 出生日期 婚否 技术等级 工资 简历
22、 图片 王小萍 女 08/13/69 .T. 10 443.66 沈红苑 女 12/21/78 .F. 11 350.00 刘智铁 男 03/23/79 .F. 12 289.60,其中,Rsh1.dbf和Rsh2.dbf是此前已经建立、输入了数据并存盘的数据库文件。如果Rsh. dbf不是刚刚建立的数据库,为了从Rsh1.dbf和Rsh2.dbf向Rsh.dbf追加记录, 需要在命令窗口先打入打开数据库Rsh.dbf的命令:USE D:rsh回车,然后才能依次打入向Rsh.dbf追加记录的命令:,USE D:rsh(打开人事数据库文件)APPEND FROM D:rsh1 FIELDS 姓名
23、, 性别, 出生日期, 技术等级(命令)APPEND FROM D:rsh2 FIELDS 姓名, 工资 FOR 性别女(命令)上面两条命令执行后, 数据库Rsh.dbf中的记录如下:,姓名 性别 出生日期 婚否 技术等级 工资 简历 图片 朱宪佐 男 07/21/65 .T. 9 432.50 张俐荣 女 09/10/54 .T. 8 521.00 宋卫星 男 11/21/65 .T. 9 钱小荣 女 09/10/54 .T. 8 王德明 男 04/27/76 .T. 11 朱福彦 男 10/28/45 .T. 5 赵四蔓 女 06/15/46 .T. 6 王小萍 443.66 沈红苑 35
24、0.00,(3) 源库和目标库的同名字段的类型必须一致。 源库和目标库同名、 同类型的字段, 如果其宽度不同, 当目标库的字段宽度大于源库的字段宽度时, 字段值仍可以正常传送。但是, 当目标库的字段宽度小于源库时,字符型字段值被截尾传送; 而数值型字段值的传送会出现以下两种情况: 目标库把整个宽度首先用于存放整数部分, 剩余的宽度用于存放小数的高位部分; 如果目标库的字段宽度容纳不下源库字段值的整数部分时,目标库中接收数据的字段值被“*”填充。 (4) 命令中如果使用条件分句, 则只追加源库中那些符合条件的记录。 例如, 例3.1中的命令使用了条件分句: FOR 性别女,所以源库Rsh2.db
25、f中性别为男的记录没有向目标库追加。 ,最后, 还需要说明向数据库输入数据及显示数据库中数据的操作中, 值得注意的个问题: 不能试图用赋值命令向数据库当前记录中的字段赋值。 例如, 设当前数据库有名为“工资”的字段名, 则赋值命令工资=600.50回车并不能将数据600.50存入数据库中的“工资”字段中, 而是建立了一个名为“工资”的内存变量。 , 可以使用输出命令 ? 或 ? 显示数据库当前记录中的字段值。 例如, 设当前数据库中有字段名“姓名”、“性别”、“工资”, 则命令: ?姓名, 性别, 工资回车可以显示出当前记录中这三个字段的字段值。: 但是, 当一个内存变量和当前数据库中的一个字
26、段同名时,所显示的不是内存变量存储的数据, 而是数据库中的字段值。例如,设当前数据库中有名为“工资”的字段名,且已知“工资”字段的当前值是600.50, 若顺序执行下面的两条命令: ,工资=300?工资则屏幕所显示的是数据库当前记录中“工资”字段的字段值600.50。 如果用户需要显示和字段同名的内存变量所存储的数据, 应当在内存变量名之前加内存变量限定符“m.”。 例如, 执行命令: ?m.工资则所显示的就不再是“工资”的字段值, 而是内存变量“工资”所存储的数据了。,.数据库的打开、关闭、显示及记录指针,3.2.1 数据库的打开和关闭1. 数据库文件的打开打开数据库文件是指把存在于磁盘上的
27、某一个 .DBF类型的文件置于可操作状态。 例如, 每次进入FoxPro系统之后, 如果要对以前已经建立的数据库进行操作,首先必须把要操作的数据库文件打开。可用命令方式或选单方式打开数据库文件。 1) 命令方式命令格式: USE 路径数据库文件名 ALIAS 别名,如果不指定需要打开的数据库文件名, 则表示关闭当前已经打开的数据库。 若使用ALIAS, 则需为打开的数据库专门再指定一个别名; 如果不使用ALIAS, 则别名与数据库文件的主名相同。 别名的概念和作用, 将在第章介绍多库操作时说明。 2) 选单方式(1) 单击系统菜单File, 选择其下拉菜单中的Open., 出现如图3.7所示的
28、Open对话框。 (2) 在Open窗口, 从列表框Drive、 Directory中分别选择对象文件所在的驱动器、目录, 在列表框List Files of Type选择文件类型, 再用打入文件名或选择文件名的方式指定要打开的文件, 单击“Open”按钮, 则完成文件打开操作。 ,在Open窗口的右侧,提供了个复选框。若选中Read Only, 则所打开的文件作为只读文件使用;复选框Exclusive在网络环境下使用,若被选中,则所打开的数据库文件成为独享文件, 其他用户再不能打开它。 2. 数据库的关闭命令为了数据的完整和安全, 使用完数据库后一定要关闭。 关闭命令有多种: USE 关闭当
29、前数据库USE 另一数据库文件名 关闭当前数据库并打开其它数据库CLOSE ALL 关闭所有已经打开的文件,CLOSE DATABASES 关闭所有已经打开的数据库文件CLEAR ALL 关闭所有打开的文件并清除内存变量,3.2.2 显示数据库记录和数据库结构1. 显示数据库中的记录显示数据库记录的命令有三条, 分别是: (1) 连续显示的命令: LIST 范围 FIELDS 字段名表 FOR 条件(2) 分屏显示的命令: DISPLAY 范围 FIELDS 字段名表 FOR 条件,(3) 数据浏览命令: BROWSE 范围 FIELDS 字段名表 FOR 条件其中,范围短语可选用:ALL、N
30、EXTn、 RECORD n、 REST; FOR短语的作用是指定作为可显示记录的条件; FIELDS短语用于指定记录中需要显示的字段,如果是多个字段, 各个字段名之间用逗号分隔。 对上列命令格式中的可选短语说明如下: (1) 范围。 LIST命令中范围的缺省值是ALL。DISP命令中范围的缺省值取决于FOR短语,如果有FOR短语,则缺省值是ALL;如果没有FOR短语, 则缺省值是NEXT 1(即当前记录)。,BROW命令中范围的缺省值是ALL, 但是指定了NEXT n时, 只显示当前记录。 (2) FOR 条件。 FOR短语只在命令中指定的范围内起作用。 LIST、 DISP、 BROW命令
31、中FOR短语的缺省值都是 .T.。 (3) FIELDS 字段名表。 FIELDS的缺省值是数据库记录中的所有字段。 ,例 3.2 USE D:rsh(打开一个数据库文件)LIST NEXT 2 (显示从当前记录开始的两条记录)LIST 姓名, 工资 (显示所有记录中的指定字段值)DISP (只显示当前记录)DISP ALL (分屏显示所有的记录)DISP ALL 姓名,工资 FOR 工资140(选择显示符合条件 的所有记录),BROW (全屏幕浏览所有的记录) BROW FIELDS 姓名,性别,工资 (全屏幕浏览各记录中指定的字段)和LIST、 DISPLAY命令不同的是, 数据浏览命令(
32、BROWSE)将激活一个数据浏览窗口,数据库中的数据显示在浏览窗口中, 数据浏览窗口见图3.8。 Browse窗口标题行显示出所浏览的数据库文件名, 窗口标题下显示了数据库的字段名。 可用鼠标拖动字段名到其它位置, 用于改变该列字段数据的显示顺序;,当鼠标指针指向两个字段名的分界线时,鼠标指针的形状改变为双向箭头, 此时可以左右拖动字段名的分界线, 改变字段的显示宽度; 在浏览窗口, 对选中的目标字段值还可以进行修改。 所以, 在交互方式下, 浏览数据的命令是经常使用的一个命令。 2. 显示数据库的结构命令格式:LIST STRUCTURE 或 DISPLAY STRUCTURE 两个命令的功
33、能相同, 只是显示方式不同, LIST STRU是连续显示, DISPLAY STRU是分屏显示。 ,例3.3 USE D:rsh(打开一个数据库文件)LIST STRU (连续显示当前数据库的结构)DISP STRU (分屏显示当前数据库的结构),3.2.3 数据库记录指针对于已经打开的数据库,系统在内存分配了和该数据库的磁盘文件进行数据交换的缓冲区。数据库文件中的数据是以记录为单位存取到缓冲区的,系统是通过缓冲区向磁盘文件写入或读取数据的。用户可以直接存取的数据库叫做当前数据库, 当前数据库中可以直接操作的记录是当前记录, 用户可以通过有关命令改变当前记录。 为了标识当前记录,系统在打开的
34、数据库中设置了记录指针,当前记录就是记录指针所指向的记录。用户改变当前记录, 是通过移动数据库中的记录指针实现的。,FoxPro提供了一系列移动记录指针的命令。用记录指针移动命令和把记录指针移动到目标记录的操作,是对数据库进行记录查询、数据编辑和其它数据库的应用、 维护、管理操作的基础。因此,用户对数据库中的记录指针的当前位置要做到胸中有数。 移动记录指针的操作命令分为记录的绝对定位命令和记录的相对定位命令。 1. 记录的绝对定位命令这是一类与当前记录指针位置无关的记录定位命令, 其命令格式有: 记录号 记录指针指向第条记录, 仅限于命令窗口内使用),GO 记录号 (记录指针指向第条记录)GO
35、 TOP (记录指针指向第一条记录)GO BOTTOM (记录指针指向最后一条记录) 例 3.4USE D:rsh(刚打开的数据库, 记录指针指向第一条记录) 3 (记录指针指向了第三条记录)GO 2 (记录指针指向了第二条记录)GO TOP (记录指针指向了首记录)GO BOTTOM (记录指针指向了尾记录),2. 记录的相对定位命令这是和当前记录位置有关的记录指针定位命令, 即从当前指针位置开始, 上、 下移动记录指针。其命令格式是:SKIP 数值表达式该命令只取用数值表达式结果值的整数部分。当其结果值为正整数n时,该命令驱动记录指针下移n条记录;当其结果值为负整数n时,该命令驱动记录指针
36、上移n条记录;缺省数值表达式时, 相当执行下移一条记录(即SKIP和SKIP 1是等价的命令)。 例 3.5USE D:rsh(刚打开的数据库, 记录指针指向第一条记录),SKIP 3 (向下移动三条记录, 即指针指向第四条记录) BROW (查看记录指针的移动情况)SKIP -1 (记录指针向上移动一条记录, 即指向第三条记录)DISP (显示当前记录)SKIP 2*3-7 (记录指针指向第二条记录)DISP (显示当前记录)值得注意的是, 有一些并非是移动记录指针的命令, 也能驱动记录指针的移动。 例如, 执行LIST命令后,将使记录指针指向数据库文件的尾标记(最后一条记录的后面)。因此,
37、用户还应当了解由于执行其它命令引起记录指针移动的情况。 ,.数据库数据的增、 删、 改,3.3.1数据库的备份和恢复1. 数据库的备份(1) 备份数据库的命令: COPY TO 路径生成数据库名 FIELDS 字段名表范围 FOR 条件(2) 说明: 源数据库是当前数据库, 目标数据库(副本)是磁盘文件。 , 范围的缺省值是 ALL, FIELDS的缺省值是全部字段, FOR的缺省值是.T.。 也可以在DOS下用COPY命令或在Windows下用文件复制的方法做数据库的备份。但是,离开FoxPro系统的备份方法就不能做字段、 记录的选择。 为了使数据库文件中的数据能被其它软件利用, 可以用此命
38、令将数据库文件复制为文本文件。 为此, 在此命令后面加上关键字: DELIMITED WITH 数据项分隔符如果不指定数据项分隔符,则数据项之间用逗号分隔,其中的字符型数据带有界定符。 ,例如, 依次打入下列命令: USE D:rshCOPY TO D:ABC DELIMITED则生成主名为ABC、 扩展名为.TXT的文本文件, 它是可以在一种文字编辑软件下阅读的文件。 2. 数据库的恢复(1) 在操作系统下, 使用文件复制的方法恢复数据库文件。 (2) 打开备份数据库文件,以备份数据库作为源数据库, 沿用数据库备份命令, 生成要恢复的数据库文件。 ,3. 举例例 3.6做Rsh.dbf完整的
39、备份数据库, 备份库名为RSH BF1.DBF。 USE D:rshCOPY TO D:rshbf1例 3.7STHT5SS做Rsh.dbf只包含字段姓名、 工资的备份数据库。 USE D:rshCOPY TO D:rshbf2 FIELDS 姓名,工资例3.8做Rsh.dbf只包含姓名、 工资两个字段且性别为 男的备份数据库。 ,3.3.2数据库中数据的修改可用于修改数据库中数据的命令有很多, 这里仅介绍EDIT、 CHANGE、 REPLACE等三条修改命令的主要功能。 注意:使用下面的数据修改命令前, 应当先使用指针移动命令,把需要编辑的记录置为当前记录。 1. 编辑命令命令格式一: E
40、DIT 范围 FIELDS 字段名表 FOR 条件命令格式二: CHANGE 范围 FIELDS 字段名表 FOR 条件,EDIT和CHANGE命令的效果相同。当执行EDIT或CHANGE命令时, 屏幕出现和图 3.5相同的记录编辑窗口, 对字段值修改后只要打入回车键, 修改就有效。 对当前记录修改完后,自动将下一条记录作为当前编辑的记录。 存盘退出数据编辑窗口的操作同数 据输入命令。 例 3.9 USE D:rshEDIT (对当前记录进行编辑)EDIT FIELDS 姓名,工资 (对当前记录指定的字段值进行编辑),EDIT FOR 工资140 (对全库满足条件的记录进行编辑) EDIT 5
41、 (对指定的记录进行编辑)2. 替换命令命令格式: REPLACE 范围 字段名 WITH 表达式, FOR 条件本命令用表达式的值替换数据库记录中字段的当前值。如果使用了FOR短语而又指定了范围,则范围内的所有记录都是操作对象;如果使用了FOR短语而没有指定范围,则在全数据库中,凡是符合条件的记录都是操作对象。如果使用FOR短语而指定范围为缺省范围, 则此命令只对当前记录有效。 ,用APPEND BLANK命令向数据库追加了一条空记录后, 如果不能用赋值命令直接向字段赋值,则一般用替换命令向各个空字段写入数据。 例 3.10对数据库Rsh.dbf中的工资字段值, 用替换命令进行修改。依次打入
42、下列命令, 请观察替换命令执行的效果: USE D:rshREPLACE 工资 WITH 工资+50(仅对当前记录的工资字段值进行修改) BROW (验证替换命令的执行结果, 下同)REPL 工资 WITH 工资+50 FOR 工资200(对工资小于200的所有职工都增加50元),BROWREPL ALL 工资 WITH 工资+50 FOR 工资200 (执行效果同上, 即有FOR可不加ALL)BROW可见, 当按表达式对全数据库的某些字段值进行修改时, 使用替换命令是十分方便、 快捷的。 ,3.3.3数据库记录的删除视需要, FoxPro可以对数据库中某些记录进行逻辑删除、 物理删除、 全库
43、数据清除等操作。 1. 记录的逻辑删除和恢复在每一条记录的最前面, 都有一个由系统管理的标志位, 叫做逻辑删除标记区。 所谓记录的逻辑删除,是使用逻辑删除命令, 在记录的逻辑删除标记区作一个逻辑删除的标记(黑色小方块)。因为有逻辑删除标记的记录还在数据库中,所以逻辑删除的记录可以恢复, 即从记录的逻辑删除区去掉逻辑删除标记(黑色小方块消失)。,因为系统环境的缺省设置是SET DELETE OFF, 所以一般情况下,带有逻辑删除标记的记录仍然属于可操作的记录。 但是,当系统环境设置为SET DELETE ON时,逻辑删除的记录就不能作为操作对象了。 (1) 逻辑删除的命令格式是: DELETE
44、范围 FOR 条件。 例 3.11依次打入下列命令, 观察各个逻辑删除命令的执 行效果: USE D:rshDELE (逻辑删除当前记录)BROW (可见, 当前记录有了逻辑删除标记),DELE NEXT 3 (逻辑删除当前记录在内的三个记录)BROW (可见, 已有条记录被逻辑删除)DELE FOR 性别=女 (条件逻辑删除)BROW (可见, 凡是性别为女的所有记录被逻辑删除) DELE ALL (逻辑删除数据库中的所有记录)BROW (可见, 逻辑删除了数据库中的所有记录),(2) 恢复逻辑删除的命令格式是 RECALL 范围 FOR 条件。例 3.12依次打入下列命令, 观察恢复已被逻
45、辑删除记录的恢复情况: USE D:rshRECALL (仅恢复当前逻辑删除的记录)RECALL FOR 性别=女 (条件恢复, 不能再用ALL指定范围) RECALL ALL (无条件全部恢复)(3) 在Brows窗口进行逻辑删除和恢复。,在Brows窗口, 如果用鼠标单击某一记录的逻辑删除标记区,则该标记区置为逻辑删除标记, 即该记录成为被逻辑删除的记录;如果一条记录的逻辑删除标记区已经有逻辑删除标记, 则用鼠标单击该标记,逻辑删除标记消失,即逻辑删除的记录被恢复。可见,在Brows窗口进行记录的逻辑删除或恢复, 是十分简单、方便的。 2. 记录的物理删除记录的物理删除是指把带有逻辑删除标
46、记的记录从数据库中清除。 物理删除的命令是PACK。 例 3.13USE D:rshDELE NEXT 2 (首先逻辑删除两条记录)PACK (再从数据库中清除逻辑删除的这两条记录),在实际应用中往往先作记录的逻辑删除, 待确认逻辑删除的记录没必要保留时, 再作物理删除。 3. 全库数据的清除如果需要把当前数据库中的所有数据全部清除, 应当使用ZAP命令。实际应用中,往往先做被清除数据库的备份。 例 3.14USE D:rshZAP(此时的Rsh.dbf已经成为空数据库),3.3.4 插入记录当需要在数据库的记录之间插入一条新的记录时, 使用记录插入命令。插入命令的一般格式是:INSERT BLANK BEFORE。如果选用BEFORE, 则在当前记录的前面插入一条记录, 否则在当前记录的后面插入一条记录; 如果选用BLANK,则仅仅插入一条空记录。除了插入空记录外, 执行该命令将激活数据输入窗口。 例 3.15 USE D:rshGO 3 (把记录指针指向要插入记录的位置)INSERT (在当前记录后插入一条记录并输入数据),