1 . 引 言
---- ORACLE 关 系 数 据 库 管 理 系 统 是 目 前 世 界 上 最 流 行 的 高 性 能 数 据 库 管 理 系 统 之 一,Developer/2000 是ORACLE 公 司 推 出 的 集 成 化 软 件 开 发 和 运 行 环 境。 ORACLE *Forms 是Developer/2000 的 一 部 分, 它 是 一 种 功 能 丰 富, 用 于 构 建 应 用 的 工 具 产 品, 产 品 化 屏 幕 处 理 存 储 在 数 据 库 中 的 数 据。 在 许 多 实 际 应 用 中, 往 往 需 要 将 数 据 用 很 直 观 的 图 形 表 示 出 来。 例 如: 饼 图, 折 线 图, 直 方 图 等, 从 而 使 数 据 及 其 比 例 关 系 一 目 了 然。Developer/2000 的 另 一 工 具ORACLE *Graphics 提 供 了 丰 富 的 图 形 化 表 示 数 据 的 方 法, 它 可 以 从 各 种 数 据 源 获 得 数 据, 并 可 以 与Forms 模 块 结 合 起 来, 更 有 效 地 表 示 数 据。
---- 笔 者 曾 参 加 某 企 业 决 策 支 持 系 统 的 开 发 工 作, 通 过 在Forms 中 调 用Graphics 中 的 图 形 功 能, 使 数 据 表 示 更 为 直 观, 并 可 根 据Forms 中 数 据 的 变 化 来 动 态 地 显 示 图 形, 从 而 帮 助 决 策 人 员 进 行 数 据 分 析, 达 到 支 持 决 策 的 目 的。 下 文 是 笔 者 在 实 际 开 发 中, 完 成 动 态 显 示 图 形 功 能 制 作 过 程 中 的 一 点 体 会。
2. 动 态 图 形 显 示 的 实 现
---- 本 例 假 设 有 一 个 产 品 销 售 数 据 表SALES, 并 含 有 销 售 时 间, 产 品 名 称, 销 售 量 三 个 字 段( 销 售 时 间 以 年 为 单 位), 其 数 据 字 典 为
字 段 名
字 段 长 度
字 段 含 义
TIME
number(4)
销 售 时 间
NAME
char(10)
产 品 名 称
AMOUNT
number(10,2)
销 售 量
---- 启 动Graphics, 建 立 一 个 新 的 图 形 文 件, 并 命 名 为chart.ogd。 在Queries 中 定 义SQL 查 询 语 句 以 显 示 图 形, 并 在 图 形 的 属 性 栏 中 定 义x 轴 和y 轴 所 需 显 示 的 数 据。 本 例 将 在x 轴 显 示 产 品 名 称,y 轴 显 示 各 种 产 品 的 销 售 量。
---- 启 动Forms, 建 立 一 个 新 的 Forms 应 用 文 件sale.fmb。 在 画 布CANVAS1 中 填 加 一 个List Item 控 件LIST1 , 并 在LIST1 的 属 性 中 填 充 所 要 显 示 的 时 间 值。 然 后 填 加 一 个Chart Item 控 件chart_area1, 并 调 节 好chart_area1 的 边 界 和 大 小, 以 显 示 图 形chart.ogd。
---- 在Forms 中 调 用 图 形, 必 须 与Graphics 进 行 参 数 值 的 传 递。 首 先 回 到Graphics 中, 在chart.ogd 中 设 置 如 下 结 构:
---- (1) 在 参 数 表Parameters 中 定 义 参 数。 本 例 需 传 递 时 间 参 数, 并 设 其 为 m1, 在 参 数 表 中 设 置 其 属 性
parameter m1
name m1
type number
initial value 1998
---- (2) 定 义 图 形 的 查 询 语 句。 在Queries 中 定 义"query0" 查 询, 如 下 所 示:
select product,amount
from sales
where time=:m1
---- (3) 定 义 过 程。 在 Program Unit 中 编 写 update_chart 过 程, 完 成 图 形 随 参 数 变 化 显 示 的 功 能。
PROCEDURE update_chart IS
BEGIN
og_execute_query(og_get_query('query0'));
END;
---- 完 成 以 上 工 作 后, 回 到Forms 中, 首 先 打 开orawin95\forms45\plsqllib\og.pll 文 件, 然 后 定 义 如 下 结 构:
---- (1) 在LIST1 的 属 性List elements 中 填 写 列 表 框 中 所 要 显 示 的 数 值, 然 后 设 置WHEN_LIST_CHANGED 触 发 器, 并 编 写 触 发 器 代 码, 如 下
pl ParamList;
pl := Get_Parameter_List('plist');
IF NOT Id_Null(pl) THEN
destroy_parameter_list(pl);
END IF;
pl := Create_Parameter_List('plist');
add_parameter(pl,'m1',text_parameter,:blk1.list1);
og.interpret('c:\chart.ogd','chart_area1','
update_chart;',true,pl);
---- (2) 在Forms 中 设 置WHEN_NEW_FORM_INSTANCE 触 发 器, 完 成 初 始 化 工 作, 其 程 序 如 下:
Set_Window_Property (Forms_MDI_Window,
Window_State,Maximize);
Show_Window ('sales');
set_window_property('sales',window_state,
maximize);
og.open('c:\chart.ogd','chart_area1');
---- (3) 在Forms 中 设 置POST_FORM 触 发 器, 用 来 在 程 序 结 束 时 关 闭 图 形。
og.close('c:\chart.ogd','blk1.chart_area1');
---- 通 过 以 上 过 程, 动 态 图 形 显 示 得 以 实 现。 当 改 变 时 间 列 表 中 的 数 值 时, 图 形 随 着 时 间 的 改 变 而 变 化, 显 示 另 一 个 时 间 相 应 的 各 种 产 品 的 销 售 量 的 值。
3. 结 论
---- 本 文 介 绍 了 一 些Developer/2000 中Forms 和Graphics 的 开 发 方 法 及 使 用 技 巧。 当 然Developer/2000 中 还 有 许 多 其 他 的 触 发 器 及 内 部 例 程, 需 要 在 实 践 中 不 断 探 索。