VF上机题练习10
作者:转载自:网络更新时间:2009-9-5

三、综合应用(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保存菜单源文件,并生成菜单,运行菜单