1、国家二级 VF机试模拟试卷 107及答案与解析 一、基本操作题( 30分) 1 (1)将考生文件夹下的自由表 “职称 ”添加到数据库 “职员管理 ”中。 (2)将数据库中的表 “考勤 ”移出,使之变为自由表。 (3)从数据库中永久性地删除数据库表 “奖励 ”,并将其从磁盘上删除。 (4)为数据库中的表 “职称 ”建立候选索引,索引名称和索引表达式均为 “职称编号 ”。 二、简单应用题( 40分) 2 在考生文件夹下完成如下简单应用: (1)用 SQL语句完成下列操作。列出所有与 “黑色 ”颜色零件相关的信息 (产品 编号、零件名称和数量 ),并将检索结果按数量降序排序存放于表 “result1
2、”中,将SQL语句保存在 “cx1 prg”文件中。 (2)建立一个名为 “cd1”的快捷菜单,菜单中有两个菜单项: “查询 ”和 “修改 ”。然后在表单 “bd1”中的 RightClick事件中调用快捷菜单 “cd1”。 三、综合应用题( 30分) 3 在做本题前首先确认在基础操作中已经正确地建立了 order_detail表,在简单应用中已经成功地将记录追加到 order_detail表。 当 order_detail表中的 “单价 ”修改后,应该根据该表的 “单价 ”和 “数量 ”字段修改order_list表的 “总金额 ”字段,现在有部分 order_list记录的 “总金额 ”字
3、段值不正确,请编写程序挑出这些记录,并将这些记录存放到一个名为 od_mod的表中 (与order_list表结构相同,自己建立 ),然后根据 order_detail表的 “单价 ”和 “数量 ”字段修改 od_mod表的 “总金额 ”字段 (注意一个 od mod记录可能对应几条 order_detail记录 ),最后 od_mod表的结果要求按 “总金额 ”升序排序,编写的程序最后保存为prog1 prg。 国家二级 VF机试模拟试卷 107答案与解析 一、基本操作题( 30分) 1 【正确答案】 (1) 选择【文件】 【打开】命令,或直接单击工具栏上的 “打开 ”图标,在弹出的对话框中
4、选择要打开的数据库文件 “职员管理 dbc”,选择 “独占 ”,单击 “确定 ”按钮打开数据库设计器。 在 “数据库设计器 ”中,单击右键选择 “添加表 ”,在 “打开 ”对话框中选择表 “职称 ”,单击 “确定 ”按钮将自由表 “职称 ”添加到数据库 “职员管理 ”中。 (2) 在数据库设计器中,选择表 “考勤 ”,单击右键,在弹出的快捷菜单中选 择“删除 ”命令,单击 “移去 ”按钮,选择 “是 (Y)”将表 “考勤 ”从 “职员管理 ”数据库中移除。 选择【数据库】 【清理数据库】命令清理数据库。 (3)在数据库设计器中,选择表 “奖励 ”,单击右键,在弹出的快捷菜单中选择 “删除 ”命
5、令,单击 “删除 ”按钮,将表 “奖励 ”从 “职员管理 ”数据库中删除并将其从磁盘上删除。 (4)在数据库设计器中,选择表 “职称 ”,选择【数据库】 【修改】命令,打开表设计器修改表 “职称 ”结构,在 “职称 ”表设计器的 “索引 ”选项卡的 “索引名 ”中输入“职称编号 ”,选择索引类型为 “候选索引 ”,索引表达式为 “职称编号 ”,单击 “确定 ”按钮关闭表设计器并保存表 “职称 ”结构。 二、简单应用题( 40分) 2 【正确答案】 (1) 在命令窗口中输入命令: MODI COMM cx1(回车执行 ),打开程序文件编辑窗口,在程序文件编辑窗口中输入以下程序代码: SELECT
6、产品编号,零件名称,数量 INTO TABLE result1 FROM零件,产品清单 WHERE零件零件编号 =产品清单零件编号 AND颜色 =“黑色 “ORDER BY数量 DESC 关闭程序文件编辑窗口并保存程序文件。 在命令窗口中输入命令: DO cx1(回车执行 ),执行程序文件。 (2) 选择【文件】 【新建】命令,选择【菜单】,单击 “新建文件 ”按钮,单击【快捷菜单】,打开菜单设计器,在 “菜单名称 ”中输入 “查询 ”,单击下一行,在“菜单名称 ”中输入 “修改 ”。 选择【菜单】 【生成】命令,将菜单保存为 “cd1”,生成一个菜单文件“cd1 mpr”。关闭菜单设计器。
7、选择【文件】 【打开】命令,在 “打开 ”对话框的 “文件类型 ”下拉列表框中选择 “表 单 ”,选择 “bd1 scx”,单击 “确定 ”按钮,打开表单设计器。 在表单属性窗口中双击 “RightClick Event”,打开事件代码编辑窗口,输入代码: DO cd1 mpr。 关闭表单设计器并保存表单。 三、综合应用题( 30分) 3 【正确答案】 步骤 1:在命令窗口执行命令: MODIFY COMMAND prog1,打开程序文件编辑器。 步骤 2:在编辑器中输入如下程序代码: SELECT 订单号, SUM(单价 *数量 ) AS总金额; FROM order_detail; GRO
8、UP BY订单号, INTO CURSOR arrtable SELECT order_1ist *; FROM order_list, arrtable; WHERE order list订单号 =arrtable订单号 AND order_list总金额 arrtable总金额; INTO TABLE od_mod USE od_mod DO WHILE NOT EOF() SELECT arrtable总金额 FROM arrtable; WHERE arrtable订单号 =od_mod订单号; INTO ARRAY arr REPLACE 总金额 WITH art SKIp ENDD
9、O CLOSE ALL SELECT*FROM od_mod ORDER BY总金额; INTO CURSOR arrtable1 SELECT*FROM arrtable1 INTO TABLE od_mod 步骤 3:保存文件修改,在命令窗口执行命令: DO prog1 prg,执行程序文件。 【试题解析】 本大题主要考查 的是 SQL分组计算查询; DO WHILE循环结构。本题所设计的程序代码有些难度,需要考生好好掌握。基本解题思路可按以下步骤进行: 首先,根据 order detail表的 “单价 ”和 “数量 ”数据,利用分组计算查询求出每组订单的 “总金额 ”,将结果保存到一个临
10、时表中。 然后,通过对 order list表和临时表的联接查询,找出 order list表中 “总金额 ”字段与临时表中 “总金额 ”不相同的记录,并将 order list表中这些 “总金额 ”不相同的记录输出到 od_mod表中。 接着利用 DO WHILE循环语句对 od mod表中的每条记录进行处理。通过 SQL查询语句从临时表中先获得与 od mod表当前所指记录 “订单号 ”相同的 “总金额 ”字段值,将谊值保存到数组中,再通过 REPLACE命令修改 od mod表当前记录的值,每处理完一条记录,记录指针便指向下一条记录,一直到处理完 od mod表中的所有记录。 最后将 od mod表的记录按 “总金额 ”排序,由于查询结果不能覆盖正在作为查询数据源的表,因此,可以通过一个临时表过渡,保存排序的表记录,再通过临时表将排好序的记录再保存回原数据表中。