三、综合应用(1小题,计30分)
在考生文件夹下有仓库数据库GZ3包括两个表文件:
ZG(仓库号C(4),职工号C(4),工资N(4))
DGD(职工号C(4),供应商号C(4),订购单号 C(4),订购日期D,总金
额N(10))
首先在GZ3库中建立工资文件数据表:GJ3(职工号C(4),工资N(4))
设计一个名为YEWU3的菜单,菜单中有两个菜单项"查询"和"退出"。
程序运行时,单击"查询"应完成下列操作:检索出与供应商S7、S4和S6都有
业务联系的职工的职工号和工资,并按工资降序存放到所建立的GJ3文件中。
单击"退出"菜单项,程序终止运行。
(注:相关数据表文件存在于考生文件夹下)
本题主要考核点:
表结构的建立、菜单的建立、结构化查询语言(SQL)中的联接查询、查询的排序、临时表的概念、查询结果的去向、HAVING子句、聚合函数COUNT()等的使用等知识。
解题思路:
第一步:利用菜单设计器定义两个菜单项,在菜单名称为"查询"的菜单项的结果列中选择"过程",并通过单击"编辑"按钮打开一个窗口来添加"查询"菜单项要执行的命令。在菜单名称为"退出"的菜单项的结果列中选择"命令",并在后面的"选项"列中输入以下退出菜单的命令: SET SYSMENU TO DEFAULT
第二步:在单击"计算"菜单项后面的"编辑"按钮所打开的窗口中添加如下的过程代码:
SET TALK OFF &&在程序运行时关闭命令结果的显示
OPEN DATABASE GZ3 &&打开数据库文件GZ3
USE DGD &&打开表DGD
CREATE TABLE GJ3(职工号 C(4),工资 N(4))
SELECT 职工号 FROM DGD WHERE 供应商号 IN ("S4","S6","S7");
GROUP BY 职工号;
HAVING COUNT(DISTINCT 供应商号)=3;
INTO CURSOR CurTable
&&SELECT SQL语句中的GROUP BY 子句可以用来指定结果集的组,
&&要得到"供应商号"是 "S4"、"S6"或"S7"的订购单,同时以订购单所在的职工员进行分组
&&并且保证每个分组里面供应商号有三个(也就是三个供应商都应有订购单);这样就得到了满
&&足条件的职工号,将返回的结果集放于一个临时表CurTable中:INTO CURSOR CurTable
SELECT ZG.职工号,工资 FROM ZG,CurTable WHERE ZG.职工号=CurTable.职工号;
ORDER BY 工资 DESC;
INTO ARRAY AFields&#118alue
&&将生成的临时表与DGD表进行联接查询,便可以得到满足条件的职工号和工资
&&返回的结果集放入数组AFields&#118alue中:INTO ARRAY AFields&#118alue
INSERT INTO GJS FROM ARRAY AFields&#118alue
&&在新建的表中追加记录
CLOSE ALL
&&关闭打开的文件
SET TALK ON
&&恢复命令结果的显示设置
第三步:以文件名YEWU3.MNX保存菜单源文件,并生成菜单,运行菜单
