VFP 操作技巧

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Visual FoxPro 操作技巧
一、常用的函数与表达式构造示例
常用的函数与表达式构造示例
二、字段的有效性规则设置举例
字段的有效性规则设置举例
三、三种方法修改数据表中大量记录
如何根据条件修改数据表中的大量记录
(1)利用表菜单中的“替换字段”对话框进行可视化操作
【例1】在成绩表中,从当前记录开始至向后20条记录,对课程号(kch)是“S02”的记录,要求将其中成绩(cj)低于60分的记录全部加10分。

修改记录的操作界面如下:
图1.2-4(1)用For引导kch条件图1.2-4(2)用While引导kch条件
图1.2-4(3)当前记录指针在S02处图1.2-4(4)当前记录指针在S01处
解析:对图1.2-4(3)所示的当前记录所在位置,图1.2-4(1)与图1.2-4(2)中的操作能实现完全相同的效果,即可以对图中标注出的3条记录进行修改;然而,对图1.2-4(4)所示的当前记录所在位置,图1.2-4(1)可以对图中标注出的3条记录进行修改,而图1.2-4(2)不会进行任何修改,因为当前位置的kch是S01,不满足While中的条件,该命令不再往下执行了。

可见,本题应该采用图1.2-4(1)所示的操作才能实现题意要求。

【特别提醒】由上图可以看出,同样的条件写在while 框里与写在For框里有时效果是不同的,while引导的条件在指定范围内遇到一个不满足该条件的记录后,就不再对其余记录进行判断,即使后面还有记录是满足条件的也不再执行;而for 引导的条件则对指定范围内的记录全部进行判断、执行。

(2)在命令窗口执行Update命令
【命令格式】
UPDATE 表名 SET 字段名1=修改值1 [, 字段名2=修改值2, ……]
WHERE 条件1 [AND 条件2 AND …]
对应前面图1.2-4(1)的命令如下(这里没有指定范围):
UPDATE表cj SET cj=cj+10 WHERE cj<80 AND kch='S02'
【例2】修改课程表(表kc)中所有记录的课时数(kss)和学分(xf)字段的值,要求将所有必修课(即bxk字段的值为.T.)的课时数加16、学分增加1。

答案: UPDATE 表kc SET kss=kss+16,xf=xf+1 WHERE bxk=.T.
【例3】调整工资表(表gz)中所有讲师的综合津贴(zhjt),要求1996年(含1996年)以前参加工作的讲师每人为280元,其余的讲师为150元。

答案: UPDATE 表gz SET zhjt=iif(YEAR(gzrq)<=1996,280,150) WHERE zc=’讲师’
【例4】修改学生表(表xs)中所有记录的xh字段值,用班级编号(bjbh)中的第2至4位插入到学号中的第4与第5位之间。

答案: UPDATE 表xs SET xh=LEFT(xh,4)+SUBS(bjbh,2,3)+ SUBS (xh,5)
【提示】Update 语句是针对整个表进行操作的,不支持指定范围,如果要特殊限制的话,需要转换为where中的条件。

Update 命令不需要打开表,推荐采用Update 命令来完成根据条件修改数据表中的大量记录的操作。

(3)在命令窗口执行replace语句
【命令格式】
① REPLACE 范围字段名 WITH 修改值 FOR 条件1 WHILE 条件2
② REPLACE 范围字段名 WITH 修改值 FOR 条件1 AND 条件2
对应前面图1.2-4(1)的命令如下:
REPLACE NEXT 20 cj WITH cj+10 FOR cj<80 AND kch='S02'
对应前面图1.2-4(2)的命令如下:
REPLACE NEXT 20 cj WITH cj+10 FOR cj<60 WHILE kch='S02'
【例5】修改课程表(表kc)中所有记录的课程名(kcm)字段的值,要求所有必修课的课程名前加字母“B”,所有非必修课的课程名前加字母“X”。

答案: REPLACE ALL kcm WITH iif(bxk=.T.,’B’+kcm, ’X’+kcm)
图1.2-5 Replace 命令操作结果示意
说明:要先打开待修改的表,然后才可以执行REPLACE命令。

【提示】
u u 在VFP的命令和表达式中用到的符号,如逗号、双引号、单引号、点号、大括号、小括号等,都应该采用英文状态下的符号,否则系统报错;
u u VFP中的命令、函数名在不混淆的情况下均可以简写为前4个字符,也可以是4个字符到全名之间,但所简写字符必须逐个正确;四、建立复杂表达式的结构复合索引
如何建立结构复合索引
图1.2-6 在表设计器中建立结构复合索引示例
u u 排序
指定索引的排序顺序,单击按钮改变顺序。

向上箭头表示升序,向下箭头表示降序。

u u 索引名(索引标识)
即索引关键字的名称,必须以下划线、字母或汉字开头,且不可超过10个字。

命名应该意义明了,对单个关键字建立的索引,索引名可以直接与字段名相同;对多个关键字组合而成的索引,索引名最好用字段名的合成,这样从名称就可以了解到索引关键字信息。

u u 索引类型
有四种类型:主索引(仅适用于数据库表)、候选索引、唯一索引或普通索引(默认值)
只能把表中的一个索引设置为“主索引”,其它类型的索引可以有多个。

注意:建立索引后并不立即改变记录的显示顺序,只有将某个索引设置为主控索引后,记录才按该主控索引的顺序显示。

主索引不同于主控索引。

设置主控索引的命令是:SET ORDER TO 索引名
u u 索引表达式(索引关键字)
即用来建立索引的一个字段或字段表达式,可以在“表达式生成器”中创建或编辑一个表达式,一个表达式最多可有 240 个字符。

注意:①用多个字段建立索引表达式时,表达式的计算结果将影响索引的结果;
②不同类型字段构成一个表达式时,必须转换成统一的数据类型。

u u 筛选
指定记录参加索引的条件,即哪些记录参加索引,条件表达式的构造方法同前。

【例1】在表gz(工资)表中按zfgj(住房公积金)创建一个普通索引,索引名zfgj,要求按zfgj (住房公积金)降序排序。

单个字段的索引表达式非常简单,直接输入即可,结果如图1.2-7所示。

图1.2-7 单个关键字建立索引示例
【例2】在表js(教师)表中创建一个普通索引xdhzcdh,要求先按xdh (系代号)字段排序,系代号相同的再按zcdh(职称代号)字段排序。

这两个索引字段都是字符型的,直接相加组合成索引表达式即可,结果如图1.2-8所示。

图1.2-8 两个字符型关键字组合建立索引示例
【例3】在表kc(课程)表中创建一个普通索引ksskcdh,要求先按kss(课时数)字段排序,kss (课时数)相同的再按Kcdh (课程代号)字段排序。

这两个索引字段一个是数值型,一个是字符型的,不可以直接相加组合,需要将数值型转换成字符型才可以组合成索引表达式,结果如图1.2-9所示。

图1.2-9 一个数值型和一个字符型关键字组合建立索引示例
【例4】在表gz(工资)表中创建一个普通索引jbgzzfgj,要求先按jbgz(基本工资)字段排序,jbgz (基本工资)相同的再按zfgj (住房公积金)字段排序。

这两个索引字段虽然都是数值型,但如果直接相加将会按两者之和排序,这不符合题意要求,故需要将这两个数值型字段都转换成字符型才可以组合,结果如图1.2-10所示。

图1.2-10 两个数值型关键字组合建立索引示例
五、如何设置参照完整性
如何设置参照完整性
参照完整性用来控制如何在相关表中插入、更新或者删除记录,尤其是不同表的主关键字和外部关键字之间关系的规则,从而控制数据一致性。

比如,当删除学生表中的某个学生记录时,可以将成绩表中关于该学生的成绩记录同时删除;而当更改学生表中的学号时,成绩表中的学号也应该相应更改,以免二者不符。

(1)更新规则:指定修改父表中关键字 (key) 值时所用的规则。

(2)删除规则;指定删除父表中的记录时所用的规则。

(3)插入规则;指定在子表中插入新的记录或更新已存在的记录时所用的规则。

设置参照完整性的操作要点是:右击父表与子表之间的永久关系连线(如果尚不存在,需要先建立该关系),根据题意要求设置对应规则,不作多余规则设置。

当有多个父表时,要先选中需要设置规则的父子关系表,不可选错。

【例1】表xs中已存在主索引xsxh,索引表达式为xh; 表cj已存在普通索引cjxh,索引表达式为xh。

以表xs为主表、表cj为子表,按xh 建立永久关系,并设置表xs和表cj之间的参照完整性:更新级联。

图1.2-13 参照完整性设置示例
【提示】设置参照完整性时,系统有时候会提示要先清理数据库,此时从数据库菜单中选择“清理数据库”命令即可。

参照完整性设置完毕,系统会自动在父表的相应触发器中生成参照完整性代码(本例中是更新触发器),如图1.2-14所示。

图1.2-14 父表中自动生成的触发器代码
六、如何设置表的触发器
如何设置表的触发器
触发器是在一个插入、更新或删除操作之后运行的记录级事件代码,常用于交叉表的完整性。

默认情况下,即触发器器中无任何规则时,可以对数据表进行自由插入、更新、删除操作。

(1) 插入触发器
是向数据表中插入新记录时要验证的规则,如果插入的记录不满足要求,系统提示“触发器失败”。

如学生表的插入触发器设置为xb=”男”,则女生记录将不能插入表中。

(2) 更新触发器
是修改数据表中现有记录时要验证的规则,如果记录不满足要求,系统提示“触发器失败”。

如学生表的更新触发器设置为xb=”男”,则只能修改表中男生的记录,对女生记录不能修改。

(3) 删除触发器
是删除数据表中现有记录时要验证的规则,如果记录不满足要求,系统提示“触发器失败”。

如学生表的删除触发器设置为xb=”男”,则只能删除表中男生的记录,不能删除女生记录。

【例1】设置xs表的插入触发器:只有学号开头两位是“00”至“03”的记录允许插入,否则不允许插入。

图1.2-12 触发器设置示例
【例2】设置XS表的插入触发器:班级编号(bjbh)字段值不能为空字符串和Null值。

答案:在插入触发器的表达式器中输入: bjbh<>"" .AND. bjbh<>.NULL.
【提示】不同触发器的规则对应不同的操作,互不影响,互不取代。

七、MESSAGEBOX( ) 函数的使用
MESSAGEBOX( )函数的使用
语法格式:MESSAGEBOX( cMessageText [,nDialogBoxType [,cTitleText] ] )
举例:MESSAGEBOX ("大家都看明白了吗?", 4+32+256, "老师的担心")
MESSAGEBOX ("祝大家考试顺利!", 0+64+0, "VFP考试")
图1.2-15 对话框使用示例
表1.2-7 MESSAGEBOX ( )函数中nDialogBoxType的数字含义
MESSAGEBOX(……)的返回值代表用户选取了哪个按钮,可以据此决定下一步该做什么。

1.2-8 MESSAGEBOX( )函数返回值的含义。

相关文档
最新文档