VF上机常见错误.docx
《VF上机常见错误.docx》由会员分享,可在线阅读,更多相关《VF上机常见错误.docx(16页珍藏版)》请在冰豆网上搜索。
![VF上机常见错误.docx](https://file1.bdocx.com/fileroot1/2022-11/27/649187be-6738-4221-bbd0-033a6aa0a842/649187be-6738-4221-bbd0-033a6aa0a8421.gif)
VF上机常见错误
笔试分值分布
二级VisualFoxPro笔试由二级公共基础(30分)和二级VisualFoxPro程序设计(70分)两部分组成,各章分值分布情况如下:
日期
内容
分值分布
2008年9月
二级
公共
基础
(30分)
第一章数据结构与算法
10
第二章程序设计基础
2
第三章软件工程基础
8
第四章数据库设计基础
10
二级VF
程序设计
(70分)
第一章VisualFoxPro基础
4
第二章VisualFoxPro系统初步
0
第三章数据与数据运算
6
第四章VisualFoxPro数据库及其操作
18
第五章关系数据库标准语言SQL
30
第六章查询与视图
0
第七章程序设计
8
第八章表单设计与应用
4
第九章菜单设计与应用
0
第十章报表设计
2
第十一章开发应用程序
0
2009年4月
二级
公共
基础
(30分)
第一章数据结构与算法
10
第二章程序设计基础
2
第三章软件工程基础
10
第四章数据库设计基础
8
二级VF
程序设计
(70分)
第一章VisualFoxPro基础
4
第二章VisualFoxPro系统初步
2
第三章数据与数据运算
8
第四章VisualFoxPro数据库及其操作
8
第五章关系数据库标准语言SQL
22
第六章查询与视图
4
第七章程序设计
8
第八章表单设计与应用
10
第九章菜单设计与应用
4
第十章报表设计
0
第十一章开发应用程序
0
对比图
上机题型分布
重点:
第4,5,6,7,8章
一、基本操作题(4个小题,共计30分)
分析:
基本操作题的考点主要以第四章为主,其次是第八章表单和第五章SQL,其它章节为辅。
1、第四章:
①建立各种索引
②建立关联
③设置字段有效性规则
④设置参照完整性
⑤增加和修改字段
⑥建立项目、建立表、建立数据库
⑦自由表的添加和移出操作
2、五章:
①SQL的操纵功能(INSERTINTO,DELETEFROM,UPDATE)
②简单的SQL查询语句
3、八章:
①利用表单向导建立表单
②表单属性的修改
4、六章:
建立简单视图
5、九章:
①建立简单的菜单
②按要求对已经存在的菜单进行修改
6、十章:
利用报表向导建立报表
二、简单应用题(2个小题,共计40分)
分析:
简单应用题的考点主要以第五章SQL命令、六章的建立查询和视图、第七章程序改错为主,其次是第十章的报表和第九章的菜单,其它章节为辅。
1、六章:
建立查询(多数涉及到两个表以上的联接查询),要求查询去向为指定的表
建立视图
2、七章:
程序改错
3、九章:
在顶层表单中添加菜单
建立快捷菜单
4、十章:
用报表向导建立报表
三、综合应用题(1个小题,共计30分)
分析:
综合应用题的考点主要以第七章编程、第八章表单与第五章SQL的综合应用为主,第九、十章为辅。
1、第七章:
单纯编程题
2、第八章:
SQL与表单的综合应用题
3、第九章:
设计菜单并在其中编写SQL语句
4、第十章:
利用报表设计器建立自定义报表。
SQL常见错误提示
1、执行以下命令时,出现“找不到列‘人民币价值’”的错误提示。
select姓名,人民币价值fromrate_exchange,currency_sl;
whererate_exchange.外币代码=currency_sl.外币代码groupby姓名;
orderby人民币价值descintotableresults
解答:
弹出这样的错误提示信息,说明系统在相应的表中根本找不到’人民币价值’这个字段,正确的表达应该是将‘人民币价值’改为:
SUM(基准价*持有数量)人民币价值
2、执行以下命令时,出现“打开窗口”的错误提示。
select姓名,sum(基准价*持有数量)人民币价值fromrate_exchange,currency_s1;
whererate_exchange.外币代码=currency_s1.外币代码groupby姓名;
orderby人民币价值descintotableresults
解答:
弹出这样的错误提示,说明系统没有找到指定的表,这时当你单击“取消”按钮时,系统将弹出下一个错误提示,如下图,这说明输入的表名“currency_sl.dbf”有错,正确的表名应是:
currency_sL.dbf。
3、执行以下命令时,出现“命令中含有不能识别的知识或关键字”的错误提示。
select姓名,sum(基准价*持有数量)人民币价值formrate_exchange,currency_sl;
whererate_exchange.外币代码=currency_sl.外币代码groupby姓名;
orderby人民币价值descintotableresults
解答:
弹出这样的错误提示,首先应检查“SELECT”、“FROM”、“WHERE”、“GROUPBY”、“ORDERBY”、“DESC”、“ASC”等常用关键字是否输入错误;然后再检查标点符号是否输成中文符号了;上述语句中明显把“FROM”错输成了“FORM”。
4、执行以下命令时,出现“命令中缺少必需的子句”的错误提示。
select姓名,sum(基准价*持有数量)人民币价值,from;
rate_exchange,currency_slwhererate_exchange.外币代码;
=currency_sl.外币代码groupby姓名orderby人民币价值descintotableresults
解答:
弹出这样的错误提示,首先应检查是否多输入了逗号,再检查关键字是否漏掉,比如命令中有没有“FROM”关键字等;上述语句错在多打了一个逗号。
5、执行以下命令时,出现“语法错误”的错误提示。
select姓名,sum(基准价*持有数量)人民币价值fromrate_exchange,currency_sl;
whererate_exchange.外币代码=currency_sl.外币代码groupby姓名;
orderby人民币价值descinto.dbfresults
解答:
“into.dbf”不是正确的关键字,正确的应是“intodbf”,这里的dbf不是表的扩展名,而是与“into”一起组成一个关键字,表示将查询结果存放到指定的表中。
6、执行以下命令时,出现“找不到列‘姓名,工资’”的错误提示。
select姓名,工资from职工20
解答:
姓名与工资字段之间的逗号输成了中文状态下的逗号,应改为英文状态下的逗号。
7、执行以下命令时,出现“参数太少”的错误提示。
select*from职工20where工资=max(工资)
解答:
max(),min(),sum(),avg(),count()等几个函数不能直接跟在WHERE或ORDERBY之后,否则要产生上述错误。
8、执行以下命令时,出现“仓库号不唯一,必须加以限定”的错误提示。
select仓库号,姓名,工资from职工20,仓库20where职工20.仓库号=仓库20.仓库号
解答:
职工20表和仓库20表都有“仓库号”字段,在查询时必须指明是查询哪一个表的“仓库号”,正确的表达应改为:
仓库20.仓库号或职工20.仓库号
查询与视图常见错误提示
1、表达式的书写要仔细,整个表达式不能加引号。
解决方法:
①移去带引号的表达式。
②将表达式的引号去掉,将中文的括号和标点符号改成英文的。
③单击“添加”即可消除表达式两边的引号。
2、在建立查询时,由于表之间的联接不正确,在退出查询设计器时,总是会出现如图所示提示。
解决办法:
①删除原来的联系,用鼠标拖动的方式重新建立表之间的联系。
②正确的拖法:
学生表→选课表←课程表
③错误的拖法:
学生表←选课表→课程表
3、建立好查询之后一定要运行,若题意规定将查询结果保存在表:
TWO中,查询结果不会在“查询窗口”显示出来,此时应在右图所示的“数据工作期”处查看是否有该表产生,并且要单击旁边的“浏览”查看内容是否符合题意(字段顺序是否一致,是否有重复记录等),如果“数据工作期”中没有该表,说明操作存在问题。
解决方法:
①检查是否运行查询,未运行肯定就不会产生指定的表。
②仔细检查联接条件是否正确。
③仔细检查筛选条件是否正确。
4、使用命令建立视图时,WHERE关键字必需要输入完整。
CREATEVIEWSVIEWASSELECT学号,姓名FROMSTUDENTWHERE…
总结
(一)SQL部分
1、什么时侯输入的字母要区分大小写?
答:
在保存文件时,输入的文件名不分大小写,还有在建立表结构时,输入字段名时字母只能是小写,其它情况基本上都要区分大小写。
如:
第36套3中的“C语言”是大写;第40套1③中输入记录内容时要注意大小写;第19套3中的:
s1,s2,s3是小写。
2、在保存文件时什么时候要加扩展名?
答:
只有在保存“文本文件”时才必须加扩展名,其它情况都可以不加。
3、在建立查询时,什么时候要分组?
什么时候又不分组呢?
答:
①在查询结果中出现函数AVG(),SUM(),COUNT(),MAX(),MIN()有关的基本上都要分组(如:
统计,总和,总金额等),但如果题目要求对表中的全部记录整体进行求和、求平均、统计、求最高或最低等情况除外。
如:
第63套2①,第63套3①,第64套2①,第68套2②
②在查询结果中没有出现与函数AVG(),SUM(),COUNT(),MAX(),MIN()有关的基本上都不分组。
如:
第81套2①
4、什么条件该写在HAVING之后?
什么条件该写在WHERE之后?
答:
与函数AVG(),SUM(),COUNT(),MAX(),MIN()有关的条件应写在HAVING之后,其它的条件通常写在WHERE之后。
如:
第9套2②,第79套2②
5、部分条件不能直接表达,需要用函数转换。
如:
第5套2①,第66套2②
6、表之间的联系错误,将导致查询结果不正确。
如:
第13套2①
7、为什么查询产生的表是空的?
答:
往往是筛选条件不正确,而导致最终产生的表是空的。
如:
第36套3
8、查询设计器中能用嵌套查询吗?
答:
可以。
如:
第30套2②,第19套2①
(二)表单部分
解决条件问题——表单有关的综合应用题,大多都是以“VALUE”作为条件。
1、文本框:
thisform.text1.value
条件的格式为:
wherexxx=alltrim(thisform.text1.value)
2、列表框:
thisform.list1.value
条件的格式为:
wherexxx=alltrim(thisform.list1.value)
3、组合框:
bo1.value
条件的格式为:
wherexxx=alltrim(bo1.value)
如:
第23套3
4、微调按钮:
thisform.spinner1.value
字段为字符型:
wherexxx=alltrim(str(thisform.spinner1.value))
字段为数值型:
wherexxx=thisform.spinner1.value
5、选项组:
thisform.optiongroup1.value
Docase
Casethisform.optiongroup1.value=1
…
Casethisform.optiongroup1.value=2
…
Endcase
如:
第12套3
解决查询去向问题——表单有关的综合应用题,查询去向有以下几中可能:
1、在表格中显示。
格式:
thisform.grid1.recordsource=“select…intocursoraa”
2、在文本框中显示。
格式:
select…intoarrayaa
Thisform.text2.value=aa
(1)
如:
第9套3
3、保存到固定的表名中。
格式:
select…intodbfxxx
如:
第67套3
4、保存到动态表名中(以条件名为表名)。
格式:
bb=thisform.xx.vlaue
Select…intodbf&bb
注:
在第③④类型的基础上如果题目还要求在指定表格控件中显示(如林诗因等类题),只需要将第①类套在它们的外面即可,格式如下:
Thisform.grid1.recordsource=“select…intodbfxxx”(保存到固定表)
Thisform.grid1.recordsource=“Select…intodbf&bb”(保存到动态表)
如:
第20套3,第71套3
解决控件中数据的来源问题(SOURCETYPE决定SOURCE)。
●在实际应用中列表框和组合框通常用来作查询的条件,要掌握好列表框和组合框必须解决好列表框和组合框的数据来源,列表框和组合框的来源基本上都要求在属性窗口中直接设置,常用的来源有以下几种:
[1]源类型(ROWSOURCETYPE)为:
值
源(ROWSOURCE)为:
xx,xx,xx(不能加引号,逗号为项分隔)
含义:
列表框(组合框)中显示指定的值。
注:
这种类型是最简单的,若题目未作要求尽可能用此种类型。
如:
第67套3,第38套3
[2]源类型(ROWSOURCETYPE)为:
数组
源(ROWSOURCE)为:
xx(xx为数组名)
含义:
列表框(组合框)中显示数组xx中的数据。
注:
此种类型必须要在表单的LOAD事件中定义数组,方法为:
PUBLICXX(3)
XX
(1)=“s1”
XX
(2)=“s2”
XX(3)=“s3”
如:
第19套3
[3]源类型(ROWSOURCETYPE)为:
SQL
源(ROWSOURCE)为:
SELECT…FROM…WHERE…
含义:
列表框(组合框)中显示SQL语句查询出来的数据。
如:
第63套2②,第76套3,第82套3
[4]源类型(ROWSOURCETYPE)为:
文件
源(ROWSOURCE)为:
*.TXT(如果不写,表示显示所有类型的文件)
含义:
列表框(组合框)中显示当前目录下扩展名为TXT的文件。
如:
第73套2②
[5]源类型(ROWSOURCETYPE)为:
结构
源(ROWSOURCE)为:
xxx(xxx表示指定的某个表名)
含义:
列表框(组合框)中显示xxx表中的所有字段名。
如:
第78套2①
[6]源类型(ROWSOURCETYPE)为:
字段
源(ROWSOURCE)为:
xxx.字段名(xxx表示指定的某个表名)
含义:
列表框(组合框)中显示xxx表中指定字段名列下的所有数据。
如:
第8套3
●在实际应用中表格控件通常用来作查询输出的目的地,要掌握好表格控件关键要解决好表格控件的数据来源,常用的源类型如下:
1、题意要求:
表单一运行时表格立即显示出指定的数据。
方法:
直接在属性窗口设置表格的RECORDSOURCETYPE和RECORDSOURCE即可。
①设置RECORDSOURCETYPE为:
别名
设置ROWSOURCE为:
xxx(xxx表示指定的某个表名)
含义:
表格控件中显示xxx表中的所有内容。
操作方法:
通常可将xxx表添加到数据环境,从数据环境中拖动xxx到表单中即可。
如:
第33套3
②设置RECORDSOURCETYPE为:
表
设置RECORDSOURCE为:
xxx(xxx表示指定的某个表名)
含义:
表格控件中显示xxx表中的所有内容。
操作方法:
在表单规定位置添加一个表格控件,然后设置表格控件中上述两个属性即可。
注:
不要把xxx表添加到数据环境中。
如:
第3套3,第31套②
③设置RECORDSOURCETYPE为:
SQL
设置RECORDSOURCE为:
SELECT…FROM…WHERE…
含义:
表格控件中显示SQL语句查询出来的数据。
操作方法:
在表单规定位置添加一个表格控件,然后设置表格控件中上述两个属性即可。
如:
第83套3,第11套3
④设置RECORDSOURCETYPE为:
查询
设置RECORDSOURCE为:
xxx(xxx是一个查询文件)
含义:
表格控件中显示查询文件中查询出来的数据。
操作方法:
常用方法:
在表单规定位置添加一个表格控件,然后设置表格控件中上述两个属性即可。
如:
第3套3
2、题意要求:
表单运行时,表格起初没有显示指定的数据,当单击“命令按钮”时就会在表格中显示指定的数据。
方法:
在“命令按钮”中设置来源。
①题目要求显示一张指定表的全部内容。
方法:
在“命令按钮”的CLICK事件窗口中输入以下代码:
THISFORM.GRID1.RECORDSOURCETYPE=0
THISFORM.GRID1.RECORDSOURCE=“XXX”
注:
XXX为指定要显示的表名。
如:
第15套3,第73套3②
②题目明确要求在属性窗口将表格控件的RECORDSOURCETYPE值设置为:
4-SQL。
方法:
首先在表单中添加一个表格控件,将RECORDSOURCETYPE值设置为:
4-SQL,然后在“命令按钮”的CLICK事件窗口中输入以下代码:
THISFORM.GRID1.RECORDSOURCE=“SELECT…FROM…”
如:
第37套3,第20套3,第68套3,第7套3…
(三)程序部分
在题库中出现程序改错题的主要集中在
13套
15套
16套
19套
21套
22套
30套
32套
33套
34套
64套
55套
50
49
错误归纳:
最常见的错误
循环:
DOWHILE…ENDDO
1.作用:
反复执行DOWHILE到ENDDO之间的语句,直到条件不满足不止。
2.循环的关键:
①要清楚循环的条件:
DOWHILENOTEOF()(针对表)
DOWHILEI<10(针对数字)
②要有促进循环的命令。
SKIP:
一条一条依次往下跳。
(表)
CONTUNUE:
直接跳到下一个满足条件的记录上(表)
I=I+1(数字)
③在循环中若要替换表,要正确选择替换表的命令.
⊙update默认是对表的所有记录进行替换,replace
默认是对当前表的当前记录进行替换。
⊙只要一执行update,指针立即就指到表的最末尾,
而replace不会影响指针的跳动,执行之后指针仍
然还是在当前记录上。
⊙Update可指定替换哪一张表,而replace只能替换当前表。
正确语句出错语句
a)替换循环表的题(REPLACE)。
USE循环表
DOWHILENOTEOF()
SELECT…FROM…WHERE…INTOARRAYAA
REPLACEXXXWITHAA
(1)
SKIP
ENDDO
如:
第28套2、第34套2、第36套2、第16套2
OPEN
缺少某关键字
缺少INTO
关键字错误
LOOPNEXT
b)替换非循环表的题(UPDATE)。
USE循环表
Locatefor
DOWHILENOTEOF()
UPDATE非循环表SETXXX=YYYWHERE…
SKIP
ENDDO
Findfor
关键字错误
SCANFOR..
NUM=NUM+1
ENDSCAN
关键词FOR
Num+1
store0toS1,S2
If条件
I=i+1
Loop
Else
Exit
endif
S1,s2,=0
内部循环
跳出循环