一.基本操作题(共4小题,第1和2题是7分、第3和4题是8分)
在考生文件夹下完成下列操作(在"成绩管理"数据库中完成):
1. 为"学生"表在"学号"字段上建立升序主索引, 索引名为学号;
2. 为"学生"表的"性别"字段定义有效性规则, 规则表达式为 性别$"男女",出错提示信息是:"性别必须是男或女"。
3. 在"学生"表的"性别"和"年龄"字段之间插入一个"出生日期"字段,数据类型为"日期型"(修改表结构);
4.用SQL的UPDATE命令将学生"王三风"的出生日期修改为1983年5月1日,并将该语句粘贴在SQL.TXT文件中(第一行、只占一行)
****************************************************************************
参考答案及考点:
1.该题的考点是在表设计器中建立主索引的方法,利用建立索引命令无法实现,因为命令中没有指定主索引这一短语。
第一步:先打开表设计器,方法是:
在命令窗口中直接执行命令:
OPEN DATABASE 成绩管理
USE 学生
MODIFY STRUCTURE
或者利用菜单方式,选择"文件"->"打开",在"打开"对话框中选中数据库"成绩管理" 后再单击"确定"按钮,打开数据库设计器,再选中"学生"表,单击右键从快捷菜单中选择"修改"。
第二步:在表设计器中建立主索引的方法是:
(1)单击"索引"选项卡。
(2)在索引名下输入"学号",在类型中选择"主索引",在表达式中输入"学号"或利用"浏览"按钮选择"学号"。
(3)最后单击"确定‘命令按钮,保存所做的修改。
2.按第1题打开表设计器方法再次打开学生表设计器,然后
(1)单击"性别"字段
(2)在字段有效性组框中的规则文本框中输入:性别$"男女",信息文本框中输入:"性别必须是男或女"。
(3)单击"确定"按钮并保存所做的修改。
3.按第1题打开表设计器方法再次打开学生表设计器,然后
(1)单击"年龄"字段
(2)单击"插入"命令按钮
(3)光标定位到新字段上,输入字段名:出生日期,类型改为:日期型
(4)单击"确定"按钮并保存所做的修改。
4.该题的考点是SQL的UPDATE命令和将窗口命令保存到文本文件的方法。
(1)在命令窗口中输入命令(输入时不要换行):
UPDATE 学生 SET 出生日期={^1983/05/01} WHERE 姓名='王三风'
回车执行,再选中该命令单击右键选择"复制"
(2)单击常用工具栏"新建"按钮,类型选择"文本文件",单击"确定"
(3)单击常用工具栏的"粘贴"按钮
(4)关闭保存文本文件,输入文件名SQL.TXT(注意:必须带有扩展名TXT)
****************************************************************************
二.简单应用(2小题,每题20分,计40分)
1.用SQL语句查询至少有三门的
课程成绩在70分以上(包括70分)的学生姓名,并将结果按升序存入表文件results.dbf,然后将该SQL语句粘贴在SQL.TXT文件的第二行(只占一行)。
2.modi.prg程序的功能是:先为"学生"表增加一个"平均成绩"字段,数据类型为N(6,2);然后根据"选课"表统计每个学生的平均成绩,并写入新添加的字段。
该程序有三处错误,请改正之,使程序能正确运行(在指定处修改,不允许增加或删除程序行)。
****************************************************************************
参考答案及考点:
1.该题的考点是SQL语句的使用和向文本文件中保存命令,参考程序是:
方法1:嵌套方式
SELE 姓名 FROM 学生 WHERE 学号 IN;
(SELE 学号 FROM 选课 WHERE 成绩>=70 GROUP BY 学号 ;
HAVING COUNT(*)>=3) ORDER BY 1 INTO DBF RESULTS
方法2:连接方式
SELE 姓名 FROM 学生,选课 WHERE 学生.学号=选课.学号 AND 成绩>=70;
GROUP BY 学生.学号 HAVING COUNT(*)>=3 ORDER BY 姓名 INTO DBF RESULTS
然后在命令窗口中选中命令,单击常用工具栏"打开"按钮,打开SQL.TXT文件,光标定位在第二行,单击"粘贴"。注意因为命令行比较长,要将在命令窗口中添加的换行符";"删除,并将文本调整到同一行。
解释:
(1)首先确定需要使用表,"姓名"在学生表中,"成绩"及需要统计的选课门数要使用选课表,因此需要使用学生和选课这两个表,两表联系的字段是"学号"。
(2)成绩高于70分修饰的是元组,即低于70分的记录不参加统计,不能将该条件用在HAVING子句中。
(3)因为要统计在高于70分的成绩中每个学生选修课程的门数,因此必须要按学号分组,并且只有在选修门数大于等于3门时才是我们需要的,因此要用此做为条件使用HAVING子句限制分组。
2.第一行错误:MODIFY TABLE 学生 ADD 平均成绩 N(6,2)
改为:ALTER TABLE 学生 ADD 平均成绩 N(6,2)
第二行错误O WHILE EOF()
改为O WHILE NOT EOF()
第三行错误:REPLACE 平均成绩 = cj[1]
改为:REPLACE 平均成绩 WITH cj[1]
解释:
第一行,在SQL中,修改表结构的语句是ALTER,而不是MODIFY,在VF命令中用MODIFY STRUCTURE 可以打开表设计器表结构
第二行,EOF()是判断记录指针是否已到表尾,而只有在未到表尾时才循环
第三行,REPLACE 命令结构应该是
REPLACE 字段名1 WITH 表达式1,字段名2 WITH 表达式2 ...
****************************************************************************
三.综合应用(1小题,计30分)
在考生文件夹下,完成如下综合应用:
(1) 根据"成绩管理"数据库中的"学生"、"课程"和"选课"三个表建立一个名为view_grade的视图,该视图包含学号、姓名、课程名称和成绩四个字段,并要求先按学号升序排
序、在学号相同情况下按课程名称降序排序;
(2) 建立一个表单grade_list(控件名为form1,文件名为grade_list),表单中含有一个表格(名称为grdView_grade)控件,该表格控件的数据源是前面建立的视图view_grade;然后在表格控件下面添加一个命令按钮(名称为Command1),
该命令按钮的标题为"退出",要求单击按钮时关闭表单。
****************************************************************************
参考答案及考点:
1.该问主要考查建立视图的方法,可以用SQL命令建立,也可以用视图设计器建立
SQL命令:
CREATE VIEW view_grade AS ;
SELECT 学生.学号,姓名,课程名称,成绩 FROM 学生,课程,选课 ;
WHERE 学生.学号=选课.学号 AND 选课.课程号=课程.课程号;
ORDER BY 学生.学号,课程名称 DESC
视图设计器方法:
单击常用工具栏"新建"按钮,文件类型选择"视图",打开视图设计器,将学生、选课、课程表依次添加,按照系统默认联系建立三个表之间的联系,然后
(1)字段选项卡:双击字段学生.学号、学生.姓名、课程.课程名称、选课.成绩
(2)排序依据选项卡:双击字段学生.学号,选中升序;双击课程.课程名称,选中降序
(3)单击视图设计器右上角关闭按钮,在保存对话框中输入名称view_grade
2.单击常用工具栏"新建"按钮,文件类型选择"表单",打开表单设计器,然后
(1)在表单设计器中单击右键,快捷菜单中选中"数据环境"
(2)将视图view_grade添加到数据环境中
(3)从表单数据环境中拖动视图view_grade到表单,在表单中自动生成表格对象
(4)设置表格对象的属性如下:
属性 属性值 ColumnCount* 4 RecordSource* view_grade RecordSourecType* 1-别名 Name*grdView_grade 上面表中带*号属性的属性值是自动产生的。表格对象中的列控件对象和表头控件对象的属性值如下表,这些属性值也是自动产生的。这些属性能自动产生属性值的原因是由于把视图从数据环境中拖动到了表单上。
属性属性值 Column1.ColumnOrder 1 Column1.ContrloSource view_grade.学号Column1.Headerl.Caption 学号 Column2.ColumnOrder 2 Column2.ContrloSource view_grade.姓名Column2.Header1.Caption 姓名 Column3.ColumnOrder 3 Column3.ContrloSource view_grade.课程名称 Column3.Header1.Caption 课程名称 Column4.ColumnOrder4Column4.ContrloSourceview_grade.成绩Column4.Header1.Caption成绩 (5)在表单上创建命令按钮command1,设置其Caption属性:退出。在其Click事件中写入如下过程代码:
ThisForm.release
(6)保存表单,文件名为grade_list