1、江苏省计算机二级(VFP)上机攻略(完整版)资料(可以直接使用,可编辑 优秀版资料,欢迎下载)江苏省计算机等级考试二级 Visual FoxPro上机攻略江苏理工学院-王建目 录项目、数据库和表操作知识点1查询知识点6菜单知识点9表单知识点13程序改错知识点20项目、数据库和表操作知识点一、零碎知识点1、做第一题的时候,必须按考试要求设置默认目录 语句为:set default to 2、“记录有效性规则”与“字段有效性规则”不同,前者表,后者字段3、比较冷门的字段类型 备注型 M (memo Memo)(存文字) 通用型 G (gen Gen)(存图片)(备注型和通用型都是双击插入记录)整型
2、 I (同数值型,无小数位) 货币型 Y4、设置参照完整性,必须要先清理数据库 (非常重要) 先打开数据库设计器,然后菜单栏数据库清理数据库5、设置参照完整性和索引的时候,要注意保持字段类型一致,相同时不用改,不同时基本上都是转化成字符型来设置 (非常重要) 数值型转化为字符型: STR(字段名,整数位,小数位) 没有小数时直接省略 日期(时间)型转化为字符型: DTOC(字段名,1) TTOC(字段名,1) 括号中必须要加1 将当前日期转化为字符型:DTOC(DATE(),1)6、修改项目文件的项目信息 右键点击项目项目信息,然后进行设置,常考设置图标7、自由表的相关操作 (非常重要)(1)
3、题目让编辑自由表时,无法用use命令打开自由表,直接在项目管理器中双击自由表使其处于打开状态,然后在进行相关数据的命令操作;同理,当用use无法打开题目中的某个表时,要自然地想到它是自由表。(2)将自由表添加到数据库中,并设置为包含。打开数据库设计器,在项目管理器中将对应的自由表直接拖到数据库设计器中,右击选择包含。如果不要求添加到数据库中的,直接右击,选择“包含”即可。8、显示类的名称Checkbox 复选框 Combobox 组合框Editbox 编辑框 Listbox 列表框OptionGroup 选项按钮组 Spinner 微调框Textbox 文本框 Grid 表格OLEBoundC
4、ontrol OLE绑定型控件9、表记录个数: RecnoCount10、表的触发器:不可用时,输入.F.二、字段格式和字段输入掩码 (非常重要)1、字段格式 删除前导空格 T 字段全为大写字母 ! 只允许输入字母或汉字 A2、字段输入掩码 只能输入数字 9 只能输入字母或汉字 A 可以输入任意字符 X 可输入数字、空格和正负符号 #举例:某字段宽度为6,第一位只能输入数字(字母),其他为任意字符分别为:9XXXXX AXXXXX注意:会计格式。所谓的会计格式,就是只能输入数字,然后从右向左每3位加一个逗号,小数位不加逗号。举例:gz N(8) 会计格式为:99,999,999 gz N(5,
5、2) 会计格式为:99,999.99三、字段的有效性规则1、常用到的一些函数 (非常重要)(1)某字段值不能为空(空字符串),假设字段为cj !Empty(cj) 或 .NOT.Empty(cj)某字段值不能为空值 !ISNULL(cj) 或 .NOT.ISNULL(cj)同样的,如果需要设置为空或空值时,直接Empty(cj) 、ISNULL(cj)(2)某字段值大于(等于)A,小于(等于)B,假设字段为cj (非常重要)两种表达:cj=A .AND. cj0 (非常重要) (8)在字段后面补充字符,用“-”,可同时保证添加字符与原字符间没有空格 在字段前面添加字符,直接用“+”举例:在字段
6、mc(名称)前后分别添加书名号,并使其与字段间无空格 则为: “” + mc - “”(9)四舍五入 如果数值型字段含有小数,则用函数 ROUND() 如:zhcj(综合成绩)字段含有4位小数,四舍五入保留两位小数 ROUND(zhcj,2) 如果数值型字段为整数,要四舍五入,用Int(字段+5)/10)*10 如:cj(成绩)字段全部四舍五入 Int(cj+5)/10)*10(10)当前系统的日期 DATE() (非常重要) 当前系统的日期时间 DATETIME()另外截取日期型变量常用的函数有以下几个,但是他们转变之后都是数值型的,要是想变成字符型,需要额外用STR()函数转换。YEAR(
7、)、MONTH()、DAY()、HOUR()举例:“生日信息”使用“xx月xx日”表示,从csrq中截取 STR(MONTH(csrq),2)+”月”+STR(DAY(csrq),2)+”日”有效性规则常考某个字段在几个年、月、日、小时之间什么的,表示方法为:当前系统日期进行转化:Between(YEAR(DATE(),A,B)某个字段日期进行转化:Between(YEAR(csrq),A,B)2、字段有效性信息和默认值 (非常重要)(1)字段有效性信息输入时,比较要加上双引号(2)字段默认值如果为数值型和逻辑型直接输入,其他的需要加上定界符 字符型加双引号,日期型加上花括号,货币型加$(3)
8、有的题目会说“设置xx字段的有效性规则信息”,这样既要输入有效性规则也要输入有效性信息,不能遗漏。四、表记录修改的相关命令 (非常重要)1、添加删除标记(逻辑删除表中记录)(1)DELETE-SQL语句 Delete from 表 where 条件(2)use 表 delete for 条件举例:给kc表中所有学分大于或等于5的记录追加删除标记第一种:delete from kc where xf=5第二种:use kc delete for xf=52、彻底删除表中记录 第一种:use 表 第二种:use 表 delete all zap pack 3、更新表中数据(最常考) (重中之重)u
9、pdate 表 set 字段=表达式 where 条件举例:计算并修改jy表中所有记录的fk字段值:学生lx字段值为X借阅天数超过30天每天罚款0.1元(借阅天数根据借阅日期jyrq和还书日期hsrq计算)。update jy set fk=(hsrq-jsrq-30)*0.1 where lx=”X”注意:对于涉及到百分数的,不能使用%,只能通过小数来转化举例:修改jc表数据,使所有记录单价字段的值增加10% update jc set dj=dj*1.14、复制表中记录保存到新表中 (可以复制到其他文件中,见书95页)use 表copy to 新表名 for 条件 举例:将jc表中出版社名
10、称(cbsmc)为“高等教育出版社”的记录复制到表名为gdjy的新表中 use jc copy to gdjy for cbsmc=”高等教育出版社”5、为表新增一个字段 Alter table 表名 add 字段名 字段类型(字段宽度)举例:为jc表添加ndj字段,字段类型为数值型,宽度为5,小数位数为2 Alter table jc add ndj N(5,2)6、IIF()函数的具体应用(1)计算并修改gz表中所有记录的ylbx的值,计算方法如下: 如果gz+jt+qt1800元,则ylbx=(gz+jt+qt) 15%,否则ylbx=180011.5% update gz set yl
11、bx=IIF(jbgz+gwjt+qt=1800,(gz+jt+qt)*0.15,1800*0.115)(2)IIF()函数当中,可以再包含IIF函数,无限的套嵌举例:修改cj表中的数据,按照成绩值设置备注字段内容,若成绩大于或等于90,则备注字段中设置为“A”;若成绩大于等于80且小于90,则备注字段设置为“B”;低于60分设置为“D”;其余设置为“C”。 update cj set bz=IIF(cj=90,”A”,IIF(cj=80,”B”,IIF(cj30,harq-jyrq-30,0)7、在表中插入记录 Insert into 表名(字段1,字段2,)values(字段1值,字段2值
12、,)举例:在xs表中插入一条新纪录,姓名:李明,学号:12121212,性别:男 Insert into xs (xm,xh,xb) values (“李明”,”,”男”)查询知识点一、零碎知识点1、查询时涉及到自由表的,在添加窗口中点击“其他”,然后选择题目中要求自由表,并设置关联字段。2、引号问题(非常重要)在一个表中,设置需要输出的字段时,对于姓名(xm)字段,有的题目会说输出字段为xm,这个时候直接双击该字段即可;有的说输出字段为“姓名”,这时候要通过表达式来设置,在表达式生成器中输入xm AS 姓名,然后点击确定添加。需要注意的是,表达式中的汉字不需要加引号,直接输入。3、查询设计器
13、与Select-SQL语句的对应关系 (非常重要)字段:即select 后面的内容联接:即Inner joinon,两个表通过相同字段进行内联接筛选:即where,筛选符合where后条件的记录排序依据:即order by,设置输出记录以某字段排序分组依据:即group by,设置输出记录以某字段分组(分组依据里包含“符合条件”:即Having,设置输出记录的条件)杂项:包含两个面(1)记录是否唯一,对应语句为distinct(2)输出前X(X%)的记录,对应语句 top X/ X percent(不设置则输出全部)4、查看查询的SQL语句 在查询设计器的空白处点击右键查看SQL信息5、设置查
14、询去向 (非常重要)菜单栏查询查询去向,直接输入文件名,不加后缀名注意:如果查询去向为文本文件,则在前面的步骤全部做完时候,右键点击查看查询的SQL语句,然后将其复制粘贴到命令窗口中,在最后一句之后加上分号(;),然后在下一行输入:to file 文件名.txt (有时候题目中会出现保存为文本文件,且不输出“列标头”,则语句为: to file 文件名.txt plain)6、关于是否需要分组(Group by) (非常重要)在题目的表述中,基本上都没有明确要求我们“按分组”,但是是必须要操作的,分组字段可能为1个也可能为多个,根据一些关键词来分辨:(1)在设计查询中,用到了函数表达式,则必须
15、要设置分组(2)题目中出现“每个、每门、各个、按”之类的词,他们后面的基本就是分组字段;或者在输出字段中出现“总分、人数”等。举例:基于xs表和cj表,查询每位学生参加考试的课程门数、平均成绩。则:分组字段为xh,即group by xs.xh7、筛选条件(where)和分组满足条件(Having)的区分(非常重要)Where:题目中表述为“查询某字段为XXX的”,一般出现在题目的最前面Having:题目中表述为“查询结果仅输出XXX”,一般出现在题目中间或结尾举例:(1)基于js表和yxzy表,查询各院系职称为“教授”的人数、最小年龄 则筛选条件为:where zc=”教授” (2)基于js
16、表查询统计教师生日信息。要求:输出字段为;查询结果仅输出年龄为5的整数倍的记录; 则分组条件为:having mod(年龄,5)=08、设置筛选条件的时候,设计器中的“实例”相当于常量,需要加定界符。9、排序:先选择字段,后选择排序方式二、常用的函数及表达式1、计数(为统计个数) (非常重要)(1)count(*) as 万能表达,题目中没有特别要求的,可以通用(2)Sum(IIF(条件,1,0) 符合条件的记为1个,多个1个相加即为总个数举例:(1)输出字段为“学生的人数” 则:Count(*) as 人数 (2)输出字段为:“女生的人数” 则:Sum(IIF(xb=”女”,1,0) as
17、女学生人数 (3)输出字段为:“女生占总人数的比例” 则:Sum(IIF(xb=”女”,1,0)/Count(*) as 女生占总人数的比例2、求和 Sum() (非常重要) 平均数 AVG() 最大/小值 MAX()/MIN() 字段值为空 Empty() (否定为:!Empty() 或 .NOT.Empty() ) 条件 IIF() 如果,则,否则3、常用的一些表达方式 (非常重要)(1)年龄:year(date()-year(csrq) as 年龄 AVG(year(date()-year(csrq) as 平均年龄 MAX/MIN(year(date()-year(csrq) 最大/最
18、小年龄(2)百分比(率):sum(iif(),1,0)/count(*) as 百分比(率)(3)某某字段前几位作为:left(字段,数字) as XXX菜单知识点一、基础操作(非常重要)1、添加快捷键。在插入的菜单名称后面输入(按键) 如即为:视图(表单页框页表格列列标头 在最后写要修改的控件的属性,“=”之后填写修改的值(2)相对引用:是同一个表单内,两个相互独立的控件之间的引用,一般只用于某控件的某项事件代码中(Click事件,Init事件,InterActiveChange事件等等)举例:选项按钮组(Optiongroup1)某个事件中要引用文本框(text1)注意:要是某个控件的某个
19、事件引用自己的某项属性,则直接this.属性=值2、赋值(1)将控件的某一属性(通常为value)赋值为变量(如X) 语句为: X=this.value(2)将系统函数值(如sys(13))赋值给控件的某个属性(通常为value) 如将系统函数sys(13)赋值为文本框(text1)的值 总之就是被赋值的在前面3、表单自定义方法和控件相关事件的调用 (非常重要)(1)调用表单自定义方法,假设为ABC() thisform.ABC() (注意:引用自定义方法前面都是thisform,没有this)如果ABC括号中有值的,即ABC(m,n),m、n可直接为控件的属性值 (2)调用自定义事件,假设为
20、Init事件 thisform.Init() 如果具体到调用某个控件的某个具体事件,如调用命令按钮command1的Click事件4、刷新表单 thisform.refresh 关闭(释放)表单 thisform.release (非常重要) 鼠标指针指向首行、顶部、第一项 go top 5、定义数组X(1) Demission X(1) 定义全局/私有变量X Public/Private X6、当某事件在命令窗口中涉及到某项属性的加减乘除的,直接计算,不用加括号(包括属性与数值的加减乘除、属性与属性之间的加减乘除)7、表单的“数据环境” 位置在表单设计器上面的固定菜单里,用于存放表,可以将表
21、或者表的某个字段直接拖进表单设计器中(如图第二个按钮)8、设置主控索引 set order to 字段名 (如 set order to cj)9、筛选记录 set filter to 字段 (如果自定义变量X要求显示cj字段值时,set filter to cj=X) 注意:如果set filter to后面不加字段名,相当于筛选全部,也就是不进行筛选10、有些控件当中要套嵌有其他控件,如表格、页框等(1)删除控件中的控件:在属性编辑栏中选中要删除的控件,使其处于编辑状态,然后点击到表单设计器中该控件的位置,按Delete删除(2)在控件中添加控件:在属性编辑栏中选择要添加的母控件,点击控件
22、设计器中要添加的控件,在表单设计器中需要添加的位置点击一下即可 11、跟字体相关的一些属性设置,开头均为Font*加粗 FontBold 字体名称 FontName倾斜 FontItalic 字体大小 FontSize下划线 FontUnderline 字体颜色 FontColor另外:对齐方式 Alignment12、设置焦点13、同时设置多个相同控件的相同属性为相同的值thisform.SetAll(“属性名称”,属性值,”控件名称”)注意1:这里的控件名称,必须是控件的完整英文名称,如列表框(ListBox)、编辑框(EditBox)、文本框(TextBox)等等。举例:设置表单中所有编
23、辑框的value值为0 thisform.SetAll(“value”,0,”EditBox”)注意2:这个语句适用于题目中要求用一条语句来完成的情况,如果没有要求,可以用分开来一条条设置14、清除数据(1)清除列表框中的数据项 (表述为数据或数据项的用clear,即数据并非输入的,而是引用其他地方的) (2)清除编辑框中的文本 (表述为文本,数据是通过value属性输入或设置的) ” (将value属性设置为空字符串,如果并非要清除数据,而是要设置为0的,则value的值为0)15、设置输入掩码,需要设置的属性为InputMask要求只能输入6个字符 InputMask=XXXXXX要求只能
24、输入6个数字,不能为字母、汉字、空格等 InputMask=99999916、新建表单集formset1,新建表单form2菜单栏表单创建表单集/添加新表单,修改下Name属性即可17、设置表单某自定义方法的说明在属性面板中找到该方法右键“编辑属性/方法程序”,然后输入说明,应用18、“只读”的一种奇葩的表述可选中(可获得焦点)+不可更改=只读 ReadOnly 属性为.T.19、MessageBox对话框的设置MessageBox() 直接在括号里输入题目要求显示的文字,要加“”举例:thisform.MessageBox(“性别只能为女”)20、表单中所有的标点符号均为英文的标点符号,主要
25、是句号、逗号、引号、括号、大于/小于/等于号,反正全是英文状态下的符号 以上所有的命令都是在涉及到的相关控件自定义事件的命令窗口中用到的,经常考到的有Init、Click、InteractiveChange、Timer、Activate、Valid、DblClick、RightClick、KeyPress等。21、表单题做完后:执行表单保存关掉。二、常考控件及常考控件属性(一)表单 Form1标题 Caption自动居中 AutoCentre位于顶部 AlwaysOnTop边框样式 BorderStyle有无控制按钮 ControlBox (又称为“控制菜单栏”)是否有最大/最小化按钮 Max
26、Button/MinButton设置图标 Icon (直接在电脑中选择)表单高度/宽度 Height Width表单是否可见 Visible(二)标签 Lable1标题 Caption自动调整大小 AutoSize背景是否透明 BackStyle若要标签显示某个字段的值,则在要求的事件代码中填入: (三)文本框 Text1数据源 ControlSource显示内容(值) Value输入掩码 InputMask占位符 PasswordChar (占位符即输入密码时显示的*等)(四)编辑框 Edit1数据源 ControlSource指定可输入的最大字符串长度 MaxLength(五)列表框 Li
27、st1列表框绑定的数据源 ControlSource列表数据源类型 RowSourceType列表数据源 RowSource(1、若数据源为数组arr,在Init事件中直接用命令设置,this.rowsource=”arr”2、若数据源为字段,直接在属性框中输入字段名,并用逗号隔开3、若数据源为SQL语句,直接在属性框中输入SQL命令)数据行数 ListCount列数 ColumnCount同时设置多列宽度 ColumnWidths(输入数字,逗号隔开)添加新的条目 AddItem (this.additem(名称))删除一个条目 RemoveItem (this.removeitem(名称)
28、)是否显示分隔线 Columnlines排序 Sorted(this.sorted)被选中项的索引 ListIndex(为0时,表示没有项被选中)(六)组合框 Combo1控件样式 Style数据源类型 RowSourceType数据源 RowSource添加新的条目 AddItem (this.additem(名称))删除一个条目 RemoveItem (this.removeitem(名称))(七)选项按钮组 Optiongroup1按钮数目 ButtonCount按钮标题 Option1/2/3Caption初始选中状态 Value(八)复选框 Check1标题 Caption值 Val
29、ue自动大小 AutoSize(九)微调框 Spinner1允许输入的最大/最小值 KeyboardHighValue/KeyboardLowValue初始值 Value(十)计时器 Timer1计时器时间间隔 Interval(单位为毫秒,1000时为1秒)是否可用 Enabled数据源 RecordSource数据源类型 RecordSourceType有无删除标记 DeleteMask数据只读 ReadOnly滚动条类型 ScrollBalls表格高、宽 Height/Width行高 RowHeight列控件个数 ColumnCount删除表格中的某列:选中表格控件,右键选择生成器,将要删除的列所在字段移去。添加某列亦是同样方法(十二)形状控件 Shape1高、宽 Height/Width边框颜色 BorderColor前景色、背景色 ForeColor/BackColor曲率 Curvature(当Curvature=0时,形状为矩形,Curvature=99时,形状为椭圆。又当高=宽时,分别为正方形和圆)相对于左边界、顶部位置 Left/Top(当left=0时,表示左对齐;top=0,置顶)(十三)命令按钮 Command1标题 Caption(添加访问键:在标题后输入(字母),跟菜单的操作一样)是否