【实验目的】1.掌握VisualFoxPro建立数据库和数据库表的方法。2.掌握数据库、数据库表的常用操作。3.掌握工作区、多工作区和当前工作区等基本概念。4.掌握选择当前工作区的方法。5.掌握有关工作区操作的常用命令的使用方法。【实验内容】1.练习建立、修改、关闭、删除和打开数据库。2.练习建立数据库表及常用操作。3.练习使用选择工作区命令(SELECT命令)。4.练习关联两个表,建立临时性关联(SETRELATIONTO命令)和永久性关联。5.练习使用连接命令(JOIN命令)。6.练习使用表间的数据更新命令(UPDATE命令)。【实验要求与步骤】【实验4.1】数据库和数据库表练习,掌握数据库和数据库表的基本操作。实验分析本实验要求学生掌握数据库的基本操作(命令方式和菜单方式),如命令CREATDATABASE、MODIDATABASE、CLOSEDATA、DELETEDATA、OPENDATA等。要求学生掌握数据库表设计器的设置方法和自由表和数据库表间的相互转换等。(1)建立“住院信息”数据库,练习数据库的修改、关闭、删除、打开等操作。操作步骤l命令方式①启动VisualFoxPro。②在命令窗口内输入命令,如图1-4-1所示,然后按回车键。图1-4-1创建住院信息数据库③在命令窗口内输入命令:MODIDATABASE住院信息,然后按回车键,弹出数据库设计器窗口,如图1-4-2所示。实验4VisualFoxPro数据库与多表操作VisualFoxPro程序设计上机指导·49·图1-4-2数据库设计器④在命令窗口内输入命令:CLOSEDATA,如图1-4-3所示,则关闭已经打开的“数据库设计器”窗口。图1-4-3关闭数据库⑤在命令窗口内输入命令:DELETEDATA住院信息,如图1-4-4所示,则删除已经存在的数据库。图1-4-4删除数据库⑥在命令窗口内输入命令:OPENDATA住院信息,如图1-4-5所示,则打开存在的数据库。图1-4-5打开数据库技巧解析在没有指定保存路径的情况下,数据库默认保存位置一般为:“C:\ProgramFiles\MicrosoftVisualStudio\Vfp98”。·50·l菜单方式①启动VisualFoxPro。②选择【文件】|【新建】命令,在打开的“新建”对话框中选择“数据库”单选按钮,单击“新建文件”按钮,出现“创建”对话框,确定需要建立数据库的路径和数据库文件名,如图1-4-6所示,单击“保存”按钮后,打开数据库的同时将打开如图1-4-2所示的数据库设计器。图1-4-6创建并保存数据库(2)练习建立“患者信息”数据库表,并进行相关操作。操作步骤①首先打开数据库,在命令窗口输入:OPENDATABASE住院信息。②在命令窗口中输入:CREAT患者信息,然后按回车键,系统打开“表设计器”对话框,设置字段名、类型、宽度等属性,设置如图1-4-7所示。图1-4-7数据库表设计器③选择“索引”选项卡,在“索引名”列下方的文本框中输入索引名,比如zyh。④在“类型”列中下拉列表框中选择“主索引”。如图1-4-8所示。⑤单击“表达式”列右侧的生成器按钮,打开如图1-4-9所示的“表达式生成器”对话框。⑥在“表达式生成器”对话框的“表达式”框中,输入索引表达式。输入表达式时,可以在“字段”列表框中双击所需字段,如“住院号”。⑦单击“确定”按钮,完成表达式的输入,返回表设计器对话框中。VisualFoxPro程序设计上机指导·51·技巧解析数据库表的表设计器比自由表的表设计器在字段选项卡上多了“显示”、“字段有效性”、“匹配字段类型到类”、“字段注释”4个设置项,在使用时要注意区别。图1-4-8设置索引类型图1-4-9设置索引表达式(3)练习将自由表转换成数据库表。操作步骤①打开“住院信息”数据库。②在数据库设计器内右键单击空白处,在快捷菜单中选择“添加表”命令,如图1-4-10所示。③在“打开”对话框中选择需要添加的自由表,如患者信息.dbf,单击“确定”按钮,数据库设计器窗口中,就能看到添加进来的患者信息表,如图1-4-11所示。④重复第②步操作,可以为数据库添加多个表。图1-4-10添加表的快捷菜单图1-4-11将自由表转换成数据库表(4)练习将数据库表转换成自由表。操作步骤①打开“住院信息”数据库。②右键单击要删除的患者信息表,在快捷菜单中选择“删除”命令,如图1-4-12所示。③在弹出的对话框中选择“移去”按钮。·52·图1-4-12将数据库表转换成自由表【实验4.2】练习选择工作区命令(SELECT命令)。实验分析本实验要求学生掌握表别名的定义、工作区的选择、非当前工作区字段的访问等操作。(1)练习定义表的别名,要求将患者信息定义别名为病人信息。操作步骤①启动VisualFoxPro。②打开患者信息.dbf,为其定义别名,如图1-4-13所示。图1-4-13定义别名(2)练习工作区的选择(SELECT命令),要求在工作区1~3中分别打开表“患者信息.dbf”、表“床位分配.dbf”和表“住院费用.dbf”,并选择1号工作区为当前工作区,显示当前工作区内部分字段的值,并练习非当前工作区的访问。操作步骤①启动VisualFoxPro。②在命令窗口中输入如下命令,运行结果如图1-4-14所示。SELECT1USE患者信息SELECT2USE床位分配SELECT3USE住院费用SELECT1LIST住院号,姓名,性别,出生日期③在命令窗口内输入命令,如图1-4-15所示。练习非当前工作区字段的访问。技巧解析访问非当前工作区的字段时,要在该字段名前加上其所在工作区的别名或表的别名,即VisualFoxPro程序设计上机指导·53·别名-字段名或别名.字段名。图1-4-14工作区选择图1-4-15非当前工作区字段的访问【实验4.3】练习关联两个表,要求学会建立临时性关联(SETRELATIONTO命令)和永久性关联。实验分析临时性关联是指两个表之间的逻辑关联,包括一对一的关联和一对多的关联。当表关闭或使用命令关闭关联后,两个表的关联随即取消。永久性关联是指两个表之间的物理关联。两个表所从属的数据库打开后,两个表的关联关系即存在。如果想删除永久性关联,需要在数据库设计器中删除永久性关联。(1)将患者信息.dbf和床位分配.dbf以住院号为关键字段建立一对一的关联,运行结果如图1-4-16所示。操作步骤①启动VisualFoxPro。②在命令窗口中,输入如下命令:SELECT2USE床位分配&&打开子表INDEXON住院号TOzyh&&子表以住院号为索引表达式建立索引SELECT1USE患者信息&&打开父表SETRELATIONTO住院号INTOB&&建立一对一关联LIST住院号,姓名,B.医生姓名,B.护士姓名,B.床位号图1-4-16一对一关联closeallSELECTAUSE患者信息SELECTBUSE床位分配SELECTADISPLAY姓名,性别,出生日期,B.医生姓名,B.护士姓名,B-床位号·54·③在步骤②的基础上,继续执行下面命令,练习GO、SKIP、RECNO等命令。GO2&&记录指针指向2号记录DISP住院号,姓名,B.医生姓名,B.护士姓名,B.床位号&&显示2号记录的部分字段值SKIP2&&记录指针下移2位?RECNO()&&显示当前记录的记录号DISP住院号,姓名,B.医生姓名,B.护士姓名,B.床位号&&显示当前记录的部分字段值GOBOTTOM&&记录指针指向最后一条记录?RECNO()SKIP&&记录指针下移1位,记录指针指向表底?RECNO()GOTOP&&记录指针指向第一条记录?RECNO()SKIP–1&&记录指针上移1位,记录指针指向表顶?RECNO()SETRELATIONTO&&取消关联技巧解析当父表文件的记录指针移动时,子表文件的记录指针就定位于关联表达式值与索引表达式值相等的第一条记录上。如果子表中找不到匹配的记录,则子表的记录指针指向文件尾,这时EOF返回值为.T.。(2)将患者信息.dbf和住院费用.dbf以住院号为关键字段建立一对多的关联,运行结果如图1-4-17所示。操作步骤①启动VisualFoxPro。②在命令窗口中,输入如下命令:SELECT2USE住院费用&&打开子表INDEXON住院号TOzyh&&子表以住院号为索引表达式建立索引SELECT1USE患者信息&&打开父表SETRELATIONTO住院号INTOB&&建立一对一关联SETSKIPTOB&&建立一对多关联DISPALL住院号,姓名,B.费用类别,B.费用名称,B.用量图1-4-17一对多关联VisualFoxPro程序设计上机指导·55·技巧解析SETSKIPTO命令要在SETRELATION命令建立了一对一的关联之后才能使用,将一对一的关联进一步定义成一对多的关联。当父表中的一个记录与子表的多个记录相匹配时,在父表中使用SKIP命令,并不能使父表的指针移动,而子表的指针却向下移动,指向下一条与父表相匹配的记录;重复使用SKIP命令,直至在子表中没有与父表当前记录相匹配的记录后,父表的指针才向下移动。(3)练习建立永久关联。为“住院信息”数据库的“患者信息.dbf”表和表“住院费用.dbf”通过住院号建立永久关联。操作步骤①打开住院信息数据库,弹出数据库设计器窗口。②以表“患者信息.dbf”的住院号为关键字建立一个主索引zyh;再以表“住院费用.dbf”的住院号为关键字建立一个普通索引zyh。③在数据库设计器窗口中,用鼠标直接将表“患者信息.dbf”的zyh索引项拖放到表“住院费用.dbf”的zyh索引项上,在两表之间将产生一条关联线,如图1-4-18所示。④在数据库设计器窗口中双击数据库表之间的关联线,将弹出如图1-4-19所示的“编辑关系”对话框。在该对话框中可以修改已建立的关联。此外,若单击关联线,使其变粗,然后按DELETE键,则可以删除已建立的关联。图1-4-18建立永久关联图1-4-19“编辑关系”对话框【实验4.4】练习使用连接命令(JOIN命令),要求将“患者信息.dbf表”和“床位分配.dbf表”文件按住院号连接,生成一个新的表文件“患者床位.dbf”,并浏览该表。实验分析JOIN命令将两个表以关键字段相等为条件连接成独立的新表,新表与原来的两个表没有任何关系。操作步骤(1)启动VisualFoxPro。(2)在命令窗口中输入如下命令,结果如图1-4-20所示。SELECT2USE床位分配&&打开子表SELECT1USE患者信息&&打开父表JOINWITHBTO患者床位FOR住院号=B.住院号FIELDS住院号,姓名,住院科室,;诊断,B.床位号,B.医生姓名&&将父表和子表连接成新表“患者床位.dbf”SELECT0·56·USE患者床位BROWSE图1-4-20实验4.5运行结果技巧解析执行JOIN命令时,首先将表“患者信息.dbf”的记录指向第1条记录,然后在床位分配.dbf文件中按两个表住院号相等的条件查找,每找到一个就在新表“患者床位.dbf”生成一条记录。“床位分配.dbf”表的记录全部查找完后,“患者信息.dbf”表的记录指针指向下一条记录,重复比较连接,直到“患者信息.dbf”表的所有记录处理完为止。【实验4.5】表间的数据更新(UPDATE命令)。要求学会用一个表文件的数据去更新另一个表文件的数据的方法。实验分析UPDATE命令将子表中的数据按关键字段去更新主表文件的数据。操作步骤(1)创建表文件患者医疗费用合计.dbf,内容如图1-4-21所示。图1-4-21更新前的表“患者医疗费用合计.dbf”(2)使用“住院费用.dbf”表的费用小结字段值更新“患者医疗费用合计.dbf”表中的费用合计字段。输入如下命令,结果如图1-4-22所示。SELECT2USE住院费用SELECT1USE患者医疗费用合计SETORDERTOTAGzyh&&指定主索引项zyh(zyh为已建立的复合索引项)VisualFoxPro程序设计