1、第4章 Visual FoxPro的基本操作,4-1 基本概念和操作,4- 数据库,4- 创建数据表,4- 数据表的基本操作,4- 查询与统计操作,4-6 多工作区操作,4-7 小结,第4章 Visual FoxPro的基本操作,4-1 基本概念和操作,4-1-1 Visual FoxPro的基本操作方式Visual FoxPro与前期的数据库产品一样,都可以支持两类不同的基本操作方式,即交互式操作方式和程序操作方式。 1交互式方式Visual FoxPro的交互式操作方式有命令执行与界面操作两种类型。命令执行方式与界面操作方式是一致的。许多的命令功能都可以通过相应的菜单选择来实现。事实上,当
2、用户选择了某一菜单命令并执行它时,在命令窗口中便会自动显示与其对应的键盘命令,就好像用户通过键盘输入了该命令一样,所以在Visual FoxPro中,用户可以任意选用或交替使用这两种方法。,2程序操作方式程序执行方式就是将一系列的语句或命令存储在一个文件中而成为一个程序文件(.PRG),通过运行该程序文件,完成某些特殊的功能。程序操作方式不仅运行效率高,而且可重复执行。可见,交互式操作方法虽然方便、灵活,但是当用户需要反复执行某些相同的命令序列,或处理较复杂的问题时就不能发挥计算机高速度、自动化运行的优势。为此,Visual FoxPro提供了程序执行方式来解决该问题。,4-1-2 命令操作的
3、基本要求,1命令的一般格式 为了熟练掌握各种命令的使用方法,首先要了解命令的语法规则,以便读者正确地使用命令。命令的一般格式如下所示: 命令关键字 范围 ;FOR WHILE 2命令书写规则 (1)文件命名方法 文件名由主文件名和扩展名两部分组成。主文件名由字符组成,字符可以包括字母、数字、下划线、连字符等。扩展名由“”加3个字母组成,表示文件类型。,(2)本书命令、函数符号的约定 Visual FoxPro的命令在书写时,为了便于叙述,常引入下列几个符号,其约定如下。 l :其中的内容是可选项,不选时系统自动取默认值。但在程序输入时或在命令窗口中输入时均不书写这对“”,而只写其中参数的内容。
4、 l :其中的内容是用户的选择项,通常有多种可能供用户选择一种。若不在内,则为必选项,即用户必须选择多种可能中的一种;若在 内时,当不选“ ”中的内容时,其“”中的内容也不能选,而当选择“ ”中的内容时,其“ ”中的“”内的内容就为必选项。但在程序输入时或在命令窗口中输入时均不书写这对“”,而只写其中的参数的内容。 l :为二选一表示符。要求用户从本符号的左右两项中选择一顶。同样,在命令或函数的输入中,“/”线也不要写。 l .:省略符。它表示在一个命令或函数表达式中,某一部分可以按同一方式重复。,3命令格式的说明从上述命令格式可以看到,Visual FoxPro命令主要由5个部分组成,各部分
5、功能如下。 (1) 命令关键字:是一个英文动词,是Visual FoxPro的命令名,用来指定计算机要完成的操作。例如STORE、LIST、COPY TO等都是命令关键字,分别表示定义内存变量、显示表的记录、复制表的内。 (2) 表达式表:表达式表子句是由数据和运算符一起构成的有意义的式子,各表达式表是一个或多个由逗号分隔开的表达式。该表达式在一般情况下由表中字段名构成。表达式除了可以是字段、字段名表外,还可以加进运算符,如“单价*1.05”也是一个表达式。,(3)范围子句: 范围子句用来指定命令可以操作的有效记录范围。范围可有下列四种选择: l ALL:指当前表中的全部记录 ; l NEXT
6、 n:指从当前记录开始的连续N条记录 ; l RECORD n:指当前表中的第N号记录; l REST: 指从当前记录开始到最后一条记录为止的所有记录 ; (4)FOR条件子句:对满足条件的记录进行操作,如果使用FOR子句,VPF6.0将记录指针重新指向表文件顶部,系统会用FOR条件与每条记录进行比较。,(5) WHILE 条件子句:在表文件中,从当前记录开始,按记录顺序从上向下处理,一旦遇到不满足条件的记录,就停止搜索并结束该命令的执行。FOR和 WHILE都是条件子句,但在默认范围选择项条件下主要有两点不同: l FOR子句是从首记录开始判断逻辑表达式是真还是假,而WHILE子句则从当前记
7、录起判断条件是否成立; l FOR子句对逻辑表达式取真值的所有记录进行规则操作,不管这些记录是呈连续排列或是间断排列。而WHILE子句是从当前记录开始,只要遇到其逻辑表达式取假值就停止操作,不管其后是否有满足条件的记录。,4-1-3 命令的输入与编辑,1命令的输入在Visual FoxPro命令窗口中按命令的语法规则键入需要操作的命令,最后按下Enter键,就可以执行该命令了。 2命令的编辑命令窗口是一个可以编辑的窗口,可以在命令窗口中进行各种编辑操作,如插入、删除、拷贝、剪切等,或者用光标和滚动条在整个命令窗口中上下移动。这些特性对命令输入起了很大的帮助作用。比如要键入一个和上一次命令相似的
8、命令,那么只需将光标移动到上一条命令上,然后输入或删除命令的不同部分,最后按下Enter键,就可以执行这条新命令了。,3输入命令时的注意事项(1) 命令关键字不能省略,必须是命令行的第一个英文动词,其它子句可以以任意顺序跟在其后,命令动词与各子句之间用一个或多个空格隔开,如:EDIT FIELDS 学号,姓名,班级 ALL FOR 高等数学=85EDIT ALL FIELDS 学号,姓名,班级 FOR 高等数学=85EDIT FOR 高等数学=85 ALL FIELDS 学号,姓名,班级 (2) 命令动词和VISUAL FOXPRO保留字一般可用前4个或4个以上字母简写。如:DISPLAY M
9、EMORYDISPL MEMODISP MEMO,(3) 当表达式中,由FIELDS引导字段名表时,字段名表中的各字段间必须用逗号分割,但逗号“,”必须是在英文状态下输入的西文逗号“,”。(4) 命令、关键字、变量名和文件名中的字母既可以大写也可以小写,还可以大写、小写混合,三者等效。,(5) 虽然命令窗口可以上下左右滚动,也可以在一行把命令输完,但屏幕的左右滚动会很不方便,这时不妨尝试一下续行操作。输入命令时可以在命令的关键字或子句之间加分号(;),然后按回车键,再在下一行输入命令的剩余部分,这样就可以把一条长命令分成好多行来写。进行续行操作,应注意以下几点: l 命令的最后一行不能以分号结
10、尾。如: l REPLACE ALL 实发工资 WITH (基本工资+职务津贴+奖金-养老保险)*1.03 FOR 工龄20 l 当一条命令被分成多行输入时,如果想同时使用命令加入一些注释,此时注释不能出现在分号之后,而只能将注释放在命令的最后一行的后面。 l 当准备执行一个被分成多行的命令时,可将光标放在该命令的任意一行上,然后按下Enter键。,4-1-4 设置格式,1设置字体 在进行命令输入的过程中,可以通过改变命令窗口中的字体大小、行间距等清晰地显示每一条命令。用户可以使用“格式”菜单中的“字体”选项改变字体的大小。 2设置行缩进 行缩进可以极大地改善被分成多行的命令的可读性。在命令窗
11、口中为产生缩进效果,在输入命令前先按Tab键,当然也有可能需要多按几次TAB键,以产生更多的行缩进,这样接下来的行就自动产生相同的缩进。一旦在命令窗口中加入一个行缩进,那么接下来的行就可自动产生相同的缩进,不过此时需要按Ctrl+Enter将光标移到下一行,而不能用Enter键。 3出错处理在命令窗口输入命令时,会出现一些输入错误,在没发现之前按下回车键之后,系统会给出一个简单的提示。,4-2 数据库,如果想把多个表联系起来,就一定要建立数据库。只有把这些有关系的表存放在同一个数据库中,确定它们的关联关系,数据库中的数据才能被更充分地利用。数据库文件扩展名为:.dbc4-2-2 创建数据库利用
12、“数据库设计器”建立数据库,操作方法是:在Visual FoxPro 系统主菜单下,进入“数据库设计”窗口,然后打开“数据库”菜单,对数据库进行各种操作或单击鼠标右键,弹出“数据库”快捷菜单,对数据库进行各种操作。还可以通过在“项目管理器”中创建数据库;由文件菜单创建数据库;通过命令建立数据库 。,4-2-1 数据库概念,4-2-3 数据库的维护,1数据库的打开和关闭(1) 由文件菜单打开和关闭数据库打开一个已存在的数据库,操作方法是:打开“文件”菜单,选择“打开”,在“打开”窗口,在文件类型下拉框内,选择数据库类型,然后输入要打开的数据库名,再按“确定”按钮,进入“数据库设计器”窗口。(2)
13、 通过命令对数据库进行操作l 打开一个数据库【格式】 OPEN DATABASE |?【功能】 打开一个数据库。【举例】 在当前目录下打开“教职工”数据库。open database D:LIULI教职工,l 修改一个数据库 【格式】 MODIFY DATABASE |? 【功能】 修改编辑一个数据库。 【举例】 修改并编辑“教职工”数据库。MODI data D:LIULI教职工l 删除一个数据库 【格式】 DELETE DATABASE |? 【功能】 删除一个数据库。 【举例】 删除指定路径D:LIULI下的“教职工”数据库。DELE data D:LIULI教职工,2.在数据库中添加表
14、有了数据库文件,就可以向数据库添加表了。通常数据表只能属于一个数据库文件,如果你想向当前数据库中添加的表已被添加到了别的数据库中,在加入你所建立的数据库之前,必须要从其它数据库中移去后才能添加到你的数据库中。向数据库添加数据表,操作方法是:打开数据库在“数据库设计器”窗口,单击鼠标右键,弹出“数据库”快捷菜单,选择添加表;在“打开”窗口,选择要添加的表,返回“数据库设计器”窗口;重复操作可以将多个表添加到数据库中。,从数据库中移去或删除表,主要有以下两种方式:在“项目管理器”的“数据”选项卡中,选择“数据库”下方“表”中的“教师基本情况表”,然后单击“移去”按钮,在弹出的对话框中,选择“移去”
15、或“删除”。在“数据库设计器”中的预删除的表上单击鼠标右键,在弹出的快捷菜单中选择“删除”选项,或单击“数据库设计器”工具栏上的“移去表”按钮。也可将预添加的表文件从数据库中“移去”或“删除”。,3在数据库中移去/删除表,4-3-1 数据表的概念 1数据库与表的关系 数据表是存储记录数据的文件,是关系型数据库管理系统中处理数据的基本单元 数据表是由一组相关的数据按行和列排列的二维表格。 表文件扩展名为.DBF 类型 自由表:不包含于任何数据库 数据库表:包含于某个数据库(两者关系) 相关概念:字段,字段名,记录,数据库(.DBC) 2字段的命名(P50) 3字段的数据类型(P50),4-3 数
16、据表,数据库表包含许多自由表没有的属性 数据库表和自由表可以相互转换 自由表添加到数据库中成为数据库表 数据库表移出数据库成为自由表 一个表只能属于一个数据库 如果要将表从一个数据库转到另一个数据库中,必须先将它移出前一个数据库,才能加入后一个数据库。,自由表和数据库表的关系,学生表示例,6个字段,字段名分别为:学号,姓名等,2条记录,12个字段值,4-3-2 创建表结构,1. 创建表结构 “项目管理器/数据” “文件/新建/表/表向导” “文件/新建/表/新建文件” 命令:CREATE ,可任意定义为数据库表或自由表,若当前某数据库为打开状态,则创建的为数据库表,否则为自由表,创建表结构的几
17、点说明,字段名以字母或汉字开头,由字母,数字,下划线和汉字组成 字段类型根据具体情况而定,字段值与字段类型要匹配 若为字段添加索引,在索引列中选择一种排序方式 字段的NULL列有一个钩,表示该字段可以接受NULL值,在项目管理器的“数据”选项卡中,打开数据库 选择数据库下的表,单击“添加”,添加为数据库表 选择自由表,单击“添加”,添加为自由表,要添加的表必须具备下列条件 该表是一个有效的.DBF文件 表不允许与打开的数据库中已有的表同名 表不能同时放在另一个数据库中 要加入表的数据库必须具备下列条件 必须以独占方式打开。要想独占地打开一个数据库,在使用OPEN DATABASE命令时加入EX
18、CLUSIVE子句,2. 添加数据表到项目中,3.修改表结构,当建立了数据表结构之后,如果发现表结构有问题,可以利用表设计器来修改。(1)修改字段(P53)(2)添加/删除字段(P53)(3)调整字段顺序(P53),(1) 设置字段显示,设置字段标题 系统默认,表的标题显示的是字段名。字段名的最大长度只有10个字符长,在进行浏览时,如果用户不进行字段标题的设置,有时难以概括清楚该名下数据的属性; 为了在显示表中数据时浏览的清晰、方便,用户可以自定义字段标题。 标题的长度可达128个字符,4.设置字段属性(有补充),例,打开学生选课数据库|打开学生表|打开“显示”菜单|选择“表设计器”,选定需要
19、指定标题的字段,在标题框中对标题进行设置,对学号字段设置标题,对字段加以注释,以提醒自己或其它用户,清楚地掌握字段的属性、意义及特殊用途等,对字段加以注释,(2)为字段输入注释,(3)设置字段的数据输入,设置默认字段值 为了提高表中数据输入的速度和准确性, 设置字段数据的默认值时,注意字段的类型;字符型数据要加定界符“ ”,日期型数据要用到字符日期转换函数等,对入学时间设置默认值,为提高表中数据输入的速度和准确性,除了定义字段的默认值外,还可以定义字段格式和掩码。如,学号字段只接受数字字符,对学号字段设置输入掩码,(4)设置字段的格式和掩码,格式掩码中可用的功能符和格式符,(5) 设置字段的有
20、效性规则,有效性规则和有效性说明 点击“字段有效性”中“规则”框的三点按钮,可在表达式生成器中设置字段的格式,对学号字段设置规则,违反规则的出错信息,记录的输入界面 立即输入:创建完表结构后,在输入数据记录对话框中选择“是”,如下图示 之后输入:打开表,选择“显示/浏览”,选择“显示/追加方式”,选择“是”,立即输入记录,4-3-3 输入数据记录,2.输入记录时的注意事项,逻辑型字段宽度为1,只接受T,Y,F,N这4个字母之一(大小写均可) 日期型数据必须与系统日期格式相符SET DATE MDY可将系统日期格式转换为美国日期格式mm/dd/yy 备注型与通用型字段的输入与编辑 备注型与通用型
21、字段中已填有memo和gen等内容,等待输入有关数据。操作如下:,(1)把光标定位于“memo”或“gen”。 (2)按Ctrl+PgDn,Ctrl+PgUp或Ctrl+Home等组合键之一或双击鼠标,出现“memo”或“gen”编辑窗口。 (3)输入或编辑数据后,按Ctrl+W或单击关闭按钮,以储存数据和返回数据输入窗口;如果按Ctrl+Q或Esc键则放弃当前所输入的信息而返回。 (4)在备注型或通用型字段数据输入后,该记录的“memo”或“gen”中的第一个字母被改写成大写,变为“Memo”或“Gen”。 备注型与通用型字段值存储在与表文件同名,但扩展名为.FPT的备注文件中。,1打开表的
22、菜单方式单击“文件”菜单中的“打开”选项,打开“打开”对话框。选择将要打开的文件类型、文件名及其路径,然后单击“确定”按钮。 也可以用以下几种方式打开数据库即相关表 1)打开包含表的数据库,启动数据库设计器 2)双击要打开的表 3)选择显示模式 (1)单击 “显示”、“编辑”:编辑该表(edit )以分隔线将每一条记录分割开,字段按纵向排列。 (2)单击 “显示”、“浏览”:浏览该表(browse)以一行显示一条记录,每一列显示一个字段。,4-4 数据表的基本操作,4-4-1 打开和关闭表,2打开、关闭表的命令方式,(1) 打开表 【格式】USE | ? 【功能】在当前工作区打开一个表文件。
23、(2) 关闭表 【格式1】USE 【功 能】 关闭当前工作区中正打开的表文件及其索引文件。 【格式2】CLOSE ALL|DATABASES 【功 能】关闭各种类型文件。,3退出VFP系统 (1)菜单方式退出VFP系统的方式第2章介绍过,可选用以下任何一种方法退出VFP:l 选择“文件”菜单中“退出”菜单项。l 鼠标单击Visual FoxPro6.0窗口右上角的关闭按钮。l 双击Visual FoxPro6.0主窗口左上角的“控制”菜单按钮。l 直接按Alt+F4组合键。 (2)命令方式 【格式】QUIT 【功能】关闭打开的所有文件,退出VFP系统返回到操作系统。,4-4-2 显示数据 1.
24、表结构文件的修改,命令方式: USE MODIFY STRUCTURE 菜单方式: 1.选定要打开的表:文件/打开2.打开表设计器:显示/表设计器,添加字段,删除字段,修改字段内容,按着拖动改变字段位置,2表文件结构的显示 命令方式 【格式】DISPLAY|LIST STRUCTURE TO PRINTER|TO FILE 【功能】显示表文件的字段结构。,3. 表文件记录数据的显示,()命令的工作方式, ,描述:在命令窗口中键入一条VFP命令回车后,该命令立即被执行,并将命令结果显示在VFP主窗口中。 范围:ALL:对表中全部记录进行操作; NEXT:对从当前记录在内的以下连续N条记录进行操作
25、; RECORD:只对第N条记录进行操作; REST:对从当前记录到文件尾的所有记录进行操作。 FIELDS子句:指明当前操作涉及表的哪些字段,字段名间用“,”隔开,注意:FOR子句与WHILE子句均指明进行操作的记录的条件。其区别在于: 1.范围缺省时,FOR子句默认为ALL;WHILE子句则只从当前记录开始按条件筛选 2.当发现一个记录不满足条件时,FOR子句跳过该记录继续检查下去;WHILE子句则只操作到这个不满足条件的记录为止。 若两者同时出现,则优先处理WHILE子句,举例:LIST NEXT 5 FIELDS 学号,入学成绩 FOR入学成绩 =600,说明: 1.命令以命令动词开头
26、,且命令动词可缺省写为前4个字母 2.命令与子句,子句与子句,子句的各部分间须至少以一个空格隔开;且各子句的书写顺序任意,(2)查看表数据命令,BROWSELAST FIELDS FOR FREEZELOCK,功能:浏览或编辑表中数据 参数描述: FREEZE :定义唯一允许修改的字段 LOCK :当水平方向翻动屏幕时,屏幕左边连续出现不参加滚动的字段数,举例:显示学生表中所有记录的学号,姓名和入学成绩USE 学生BROW FIELDS 学号,姓名,入学成绩,举例:显示学生表中入学成绩600分同学记录USE 学生LIST FOR 入学成绩600,LIST|DISPLAY FIELDS FOR/
27、WHILE TO PRINT OFF,功能:选择输出表文件中记录数据也可用于显示表达式的值 说明:LIST与DISPLAY的区别 范围与条件缺省时,LIST默认为ALL,DISPLAY为当前记录 LIST为滚动方式输出,DISPLAY为分屏输出,4-4-3 追加记录,菜单方式: 在浏览或编辑窗口环境中 选“显示/追加方式”,可自动在尾部追加N条记录 选“表/追加新记录”,只允许添加一条记录 选“表/追加记录”,从选定文件向当前表添加多条记录,格式一:APPEND BLANK 格式二:APPEND FROM |? FIELDS SDF 格式三:INSERT INTO (字段1,字段2,) VAL
28、UE (表达式1,表达式2,); 格式四:INSERT BLANKBEFORE,命令方式:,说明: APPEND相当于:菜单方式1; APPEND BLANK相当于:菜单方式2; 命令方式的格式二相当于:菜单方式3; 在APPEND FORM 命令中,是否使用SDF子句,要根据文本文件中的数据格式来确定。 命令方式的格式四:用于在当前记录之前/后插入一条新记录,4-4-4 记录的删除与恢复,可在“浏览”或“编辑”窗口中删除记录 点击作删除标记 选“表/彻底删除”对打了删除标记的记录作真正删除,删除标记当再次单击时,为取消标记,删除记录分两步进行:第一步将要删除的记录做删除标记,第二步才将记录真
29、正从表中删除。,1记录的逻辑删除,若要有选择的删除一组记录,可单击“表/删除记录”,填写对话框。例如:,可将学生表中“入学成绩600分”的所有记录作删除标记; 要作物理删除,再单击“表/彻底删除”。,3恢复被逻辑删除的记录(P62),2记录的物理删除 (P62),4.删除、恢复记录的命令方式,格式:DELETE FOR WHILE ,格式:PACK DBF MEMO,格式:RECALL FOR WHILE ,格式:ZAP,(1)逻辑删除命令,(2).取消删除标记命令,(3).物理删除命令,(4). 删除全部记录命令,ZAP命令 与 DELETE ALL 和PACK两条命令执行的结果相同,区别在
30、于ZAP直接执行物理删除。,【例】 Use 学生 Delete next 6 &学生表上1到6条记录加删除标记List Recall for 性别=男 &取消性别为男的记录的删除标记 GOTO 5 Recall &取消第5条记录的删除标记 Pack &将带有删除标记的记录从表中删除 Zap &将所有记录从表中删除,4-4-5 修改记录,【格式1】EDIT|CHANGE FIELDS FOR WHILE 【格式2】BROWSE FIELDS FOR ,REPLACE命令功能:不进入全屏幕编辑方式,根据命令中指定的条件和范围,用表达式的值去更新指定字段的内容。 参数描述: 指定要替换值的字段。 W
31、ITH :指定用来进行替换的表达式或值。 说明:WITH后面表达式的类型必须与WITH前面字段的类型一致 。,1全屏幕编辑命令方式,【格式】REPLACE WITH , WITH FOR/WHILE ,2自动替换命令方式,【例】 浏览“学生”表中“女”生的“姓名,入学成绩” USE 学生 Browse fields 姓名,入学成绩 for 性别=女 例4.5 修改“学生”表的结构,增加“年龄”字段;将所有学生2004年的年龄填入该字段。 USE 学生 MODIFY STRU & 添加年龄字段,确定 REPLACE ALL 年龄 WITH 2004-YEAR(出生日期),4-4-6 表的复制,【
32、格式】COPY TO FIELDSFOR WHILE ,1复制任何类型的文件,【格式】COPY FILE TO TO ,2复制表文件,【格式】COPY STRU TO FIELDS,3复制表的结构,【例】 根据“学生”表,建立名为“学生_2”的表,只包括“学号,姓名,性别和入学成绩”字段,且仅包括入学成绩大于或等于580的学生记录。 Use 学生 Copy to 学生_2 fields 学号,姓名,性别,入学成绩 for 入学成绩=580 例4.8 建立名为“学生_3”的数据表,结构与学生数据表一样,不包括数据。use 学生 Copy to 学生_3 structure,4-4-7 记录的定位
33、命令,浏览窗口中: 选择“表/转到记录”,指向当前记录的下一条记录,指向当前记录的上一条记录,转向第N条记录,指针指向第一条记录,指针指向最后一条记录,指针指向满足条件的第一条记录,1菜单方式,格式1:GOTO RECORD /TOP/BOTTOM 格式2:GO RECORD /TOP/BOTTOM 格式3: ,命令功能:将记录指针直接定位到指定的记录上。,2.命令方式: 绝对移动(GO)、相对移动(SKIP)、查找定位(LOCATE),(1) 绝对移动命令,命令参数描述: :指定一个物理记录号,记录指针移至该记录上。 TOP:将记录指针定位在表的第一个记录上。 BOTTOM:将记录指针定位在
34、表的最后一个记录上。 说明: RECORD可省略。的值必须大于0,且不大于当前表文件的记录个数。,格式:SKIP ,功能:将记录指针向前或向后作相对若干条记录的移动。 参数描述: :指定记录指针作相对移动的记录数据。 说明: 1、移动的记录数等于的值,其值为正数时,记录指针向下移动,当是负数时,记录指针向上移动。 2、省略选择项,约定为向下移动一条记录,即SKIP 等价于SKIP 1。,(2) 相对移动命令,补充:记录指针的查找定位命令,格式:LOCATE 范围 FOR WHILE CONTINUE,功能:将记录指针定位到满足条件的第一条记录上。 说明:范围缺省时为all;继续查找满足条件的记
35、录用continue命令。,举例:显示学生表中入学成绩600分的第二个同学记录LOCATE FOR 入学成绩600CONTINUEDISPLAY,表当前记录与数组之间的数据传送(读、写),SCATTER FIELDS MEMO TO ,GATHER FROM FIELDS MEMO,【例】USE 学生GO 2SCAT TO A ?A(2),A(7)A(7)=A(7)+10GATH FROM ADISP,屏幕显示为“张辉 608”,4-4-8 数组与表之间的数据交换,4-5-1 排序与索引,功能:使数据记录按一定的顺序排列。 方式:物理排序(排序)、逻辑排序(索引)。 1 排序 2 索引,4-5
36、 查询与统计操作,按“学号”排序图示按“学号”索引图示,概念 排序:将表中的数据按一定的顺序重新排列,并将重新排列后的结果保存成为一个新的有序表 关键字段:决定排列顺序的字段,可以是多个 数据记录的排序命令 SORT TO ON /A/D/C, ON /A/D/CASCENDING|DESCINDINGFOR|WHILE FIELDS | FIELDS LIKE |FIELDS EXCEPT 功能:根据当前数据表,建立一个经过排序的新数据表,1、 表的排序,命令说明,排序文件名:新表的表名(文件名) ON子句中 :排序字段 /A:按升序排列,/D:按降序排列,默认为升序 /C:排序时忽略大小写
37、,否则不忽略 若选择多个字段,表示多重排序 先按排列,若字段值相同,再按排列 ASCENDING将所有不带/D的字段指定为升序, DESCINDING将所有不带/A的字段指定为降序 缺省、表示全部记录 FIELDS子句:新表所包含的字段,例 对学生选课表,按成绩降序排序,并将排序结果输出到CJXH表中 USE 学生选课 SORT ON 成绩/D TO CJXH USE CJXH BROWSE 例 SORT TO 学生 ON 入学成绩 /D,出生日期 FOR 专业编号=“03“ FIELDS 学号,姓名,性别,出生日期,入学成绩,应用举例,2、表的索引,表的索引是一种逻辑排序方法,它不改变当前表
38、文件记录的物理排序顺序,而是建立一个与该表文件相对应的索引文件。 (1)索引文件的类型 单索引文件:文件中只包含一个索引标识。扩展名为IDX 复合索引文件:文件中包含多个索引标识。扩展名为CDX,复合索引文件又分为结构复合索引和非结构复合索引:结构复合索引:索引文件名与相应的表名相同。随表的打开自动打开 非结构复合索引:索引文件名与表文件名不相同。不能自动打开,(2) 索引的类型,主索引:指定的字段或表达式中索引关键字值绝对不允许有重复值。 只能在数据库表中而不能在自由表中建立的索引 主要用于在永久关系中的主表或被引用表里建立参照完整性 一个表只能创建一个主索引 候选索引:关键字值绝对不允许有
39、重复值、有资格被选做主索引的索引。 一个表可以有多个候选索引 数据库表和自由表都可以建立候选索引。 唯一索引:允许索引关键字有重复的值,当有重复值出现时,索引文件只保存重复值的第一次值 数据库表和自由表都可以建立唯一索引 为和早期版本兼容而设计,很少使用 普通索引:是除了上面几种索引之外的一种索引,它允许索引关键字有重复的值,(3) 索引的建立 建立索引有两种方式:菜单方式和命令方式 通过用菜单方式建立的索引文件是结构复合索引文件 菜单方式: 建立:打开表设计器,选中“字段”选项卡,单击,如果要编辑索引,可选中“索引”选项卡,若要改变索引类型,在“类型”列点击“类型”列表框的下三角,弹出一列表
40、,根据需要选中索引类型。,若要改变索引名称,在“索引名”编辑框中键入索引名称。,若要改变索引表达式,在“表达式”编辑框中键入索引表达式,或点击其右按钮,弹出“表达式生成器”对话框。,在该对话框中编辑索引表达式后,点击“确定”按钮返回表设计器中,若要对满足条件的记录进行索引,可在“筛选”编辑框中键入筛选表达式,或点击其右按钮,弹出“表达式生成器”对话框。,在该对话框中编辑筛选表达式后,点击“确定”按钮返回表设计器中,若要改变排序方式,选中“排序”列的箭头,点击该箭头即可改变排序方式,再次点击将恢复原排序方式,在该窗口中也可建立新索引,INDEX ON TO |TAG OF FOR ASCENDI
41、NG|DESCINDING UNIQUE|CANDIDATEADDITIVE 对当前表中符合条件的记录进行索引 是由表中的字段、内存变量、数组等构成的字符、数值、日期或逻辑表达式。 UNIQUE选项 建立惟一索引; CANDIDATE建立候选索引 TAG 建立复合索引文件和设置索引标识,若省略OF子句,为结构复合索引文件,否则为非结构复合索引文件,命令方式创建索引,结构复合索引文件随表文件的打开而打开 SET INDEX TO ORDER | |TAGOFASCENDING | DESCENDING ADDITIVE :要打开的索引文件,如果没有用ORDER 子句指定控制索引,则第一个索引文件
42、为主控索引文件 ADDITIVE:打开索引文件的同时,不关闭已打开的索引文件 缺省所有选项将关闭当前工作区中除结构复合索引文件外的所有索引文件 use index 打开表文件的同时打开索引文件 CLOSE INDEX 关闭所有索引(结构复合索引文件除外),(4) 打开和关闭索引文件,(5) 删除索引 删除索引标识 Delete tag all | of , of 从复合索引文件中移掉一个或多个标识;若选all 删除所有的索引标识,相关的复合索引文件也被删除 删除索引文件 Erase Delete file ,排序,就是将表文件的记录按照某个或某几个字段值的大小顺序进行排序,即从物理顺序上对表文
43、件重新加以整理,产生一个新的表文件。 索引是一种逻辑排序,它只提供当前工作区中数据表内任一项符合条件的记录指针值,只产生索引文件,不改变原表文件的记录顺序,索引文件只是一种辅助文件,不可以脱离原表文件而独立使用。,有关排序与索引的小结,4-5-2 查询,查找是按照某些条件在表中查找所需记录并将记录指针指向符合条件的第一条记录。 1.条件查询 无索引查找(顺序查找,速度较慢) LOCATE FOR 命令 CONTINUE命令 有索引查找(速度较快,要求事先对表进行索引) SEEK命令 FIND命令,2.索引查询,索引查找的前提:打开表文件及相关的索引文件,确定控制索引文件或控制索引标识。(1)
44、SEEK命令: 格式:SEEK ORDER | |TAGOFIN | ASCENDING | DESCENDING 功能:将记录指针定位到 “索引关键字值=”的第一条记录。,命令说明,字符串表达式,用SET EXACT ON|OFF命令可设置字符串匹配规则。 系统默认OFF,即模糊匹配,表达式值与关键字值左子串相同就可找到。 ON表示完全匹配,表达式值与关键字值完全相同才认为找到。,应用举例,例按课程编号字段对学生选课表建立索引,然后进行查找。 USE 学生选课 INDEX ON 课程编号 TAG kcbh SEEK “02” ?FOUND() DISPLAY,(2) FIND命令,格式:FI
45、ND 功能:将记录指针定位到“索引关键字值=”的记录说明:可用SEEK命令代替。,1.计数命令,格式:COUNT FORWHILE TO 功能:计算指定范围满足条件的记录数,并将结果存于指定的内存变量 说明 TO :指定结果存放的内存变量名,若该变量不存在,系统会自动创建。 若设置了命令set deleted on,则作了删除标记的记录不被计数。,4-5-3 统计,应用举例,例统计学生选课表中成绩超过85分的学生人数 USE 学生选课 COUNT FOR 成绩85 TO cjrs ?cjrs,2. 计算命令,格式:CALCULATE FORWHILETO | ARRAY 功能:在打开的数据表中
46、,计算表达式的值 说明 有NULL的记录不包含在内 表达式中可以包含下列函数 AVG():平均值 CNT( ):表中的记录数 MAX():最大值 MIN():最小值 SUM():求和,应用举例,例统计学生选课表中成绩超过85分的学生人数及平均成绩 USE 学生选课 CALCULATE CNT( ), AVG(成绩) FOR 成绩85 TO xsrs, pjcj ?xsrs,pjcj,求和命令,格式:SUM FOR WHILE TO | ARRAY 功能:在打开的数据表中,对数值型字段表达式求和 :对指定表达式求和,省略该选项,则对所有数值型字段求和。 TO | ARRAY :指定结果存放的内存
47、变量名表或数组名,若变量或数组不存在,系统自动创建,数组存在且太小时,系统自动增加数组大小。,应用举例,例求学生选课表中成绩的总和。 USE 学生选课 SUM 成绩 TO zcj ?zcj,求平均值命令,格式:AVERAGEFOR WHILE TO | ARRAY 功能:在打开的数据表中,对数值型字段表达式求平均值。,应用举例,例求学生选课表中成绩的平均值。 USE 学生选课 AVERAGE 成绩 TO pjcj ?pjcj 例求学生表中2000级同学的平均年龄 USE 学生 AVERAGE YEAR(DATE()-YEAR(出生日期) FOR LEFT(学号,4)=“2000“ TO pjn
48、l ?pjnl,3. 分类求和命令,格式:TOTAL TO ON FIELDS FOR WHILE 功能:在打开的数据表中,按关键字分类,汇总计算,将结果存入新文件中 说明 数据表必须按关键字排序或索引 :指定存放计算结果的新表文件名 :指定作为分组总计依据的字段 FIELDS :指定要总计的字段,4-6 多工作区操作 4-6-1 工作区选择,1、工作区概念VFP6.0提供了32767个工作区。每个工作区只能打开一个表文件,若在已有表文件的工作区打开新的表文件,以前打开的表文件就会自动关闭。各表在各自的工作区中被操作。 2、工作区标识 (1).系统别名 (110 分别用AJ单个字母来命名) (2).表名或用户定义的别名 USE ALIAS IN 别名可以包含多达254个字母、数字或下划线,且必须以字母或下划线开头。,3. 工作区的选择命令,选择工作区命令 格式为: SELECT | VFP刚启动时默认1号工作区为当前工作区,SELECT( )函数可以返回当前工作区的区号。 SELECT 0表示选定当前未使用的最小号工作区。 多工作区中表字段的相互引用在当前工作区上使用其他工作区上的字段 (跨工作区字段)时,必须用别名标识. 格式为:别名.字段名 或 别名-字段名,