Developer/2000 是ORACLE 公 司 推 出 的 集 成 化 软 件 开 发 和 运 行 环 境。 它 主 要 包 括3 个 集 成 化 应 用 开 发 工 具:Forms( 数 据 表 格 生 成 工 具)、Reports( 数 据 统 计 及 报 表 生 成 工 具)、Graphics( 数 据 图 形 生 成 工 具)。 笔 者 在 项 目 开 发 中 曾 以Developer/2000 作 为 前 台 开 发 工 具, 本 文 将 以Forms 为 例 介 绍 一 些Forms 的 开 发 技 巧。
---- 在 开 发 应 用 中, 经 常 用 到List_Item 控 件, 此 控 件 是 列 表 框, 可 以 让 用 户 在 多 个 备 选 值 中 进 行 选 择。 列 表 框 的 加 载 有 两 种 方 式。 一 种 是 固 定 的, 另 一 种 是 动 态 的。
---- 1 . 固 定 式。 即 列 表 框 中 的 数 据 是 固 定 的。 这 种 方 式 比 较 简 单, 无 需 编 程 既 可 实 现。 假 设 有 一 个List_Item 控 件, 且 命 名 为List1, 如 图1 所 示。 在List1 的 属 性List elements 中 填 加 要 选 择 的 数 据 项, 即 可 达 到 目 的。 当 开 发 人 员 对 数 据 库 较 熟 悉 或 数 据 库 表 中 的 数 据 项 比 较 固 定 时, 可 采 用 此 种 方 式。
---- 2 . 动 态 式。 即 列 表 框 中 的 值 会 随 着 数 据 库 表 中 数 据 项 的 变 化 而 变 化。 此 种 方 式 的 通 用 性 较 强, 可 以 满 足 用 户 的 需 要。 在 实 际 应 用 中, 较 常 用 的 是 此 种 通 用 性 的 方 式。 本 文 将 举 一 个 实 例, 来 说 明 此 种 方 法 的 实 现。
---- 假 设 有 一 个 产 品 销 售 数 据 表SALES, 并 含 有 时 间(Time), 产 品 名 称(Name), 销 售 量(Amount) 三 个 字 段, 如 表1 所 示。
时 间 产 品 名 称 销 售 量
1997 彩 电 100
1998 彩 电 120
1997 冰 箱 90
1998 冰 箱 80
1997 空 调 110
1998 空 调 130
表1
---- 为 了 分 析 需 要, 现 要 求 用 列 表 框 把 所 有 产 品 的 名 称 显 示 出 来。 我 们 建 立 一 个 过 程pl, 并 用 游 标 来 实 现 此 功 能。 过 程pl 的 程 序 代 码 如 下:
PROCEDURE pl IS
cursor c1 is
select name from sales;
cnt number;
i number;
tname sales.name%type;
BEGIN
clear_list('list1');
open c1;
select count(distinct name) into cnt from sales;
for i in 1..cnt loop
fetch c1 into tname;
add_list_element('list1',i,tname,tname);
end loop;
delete_list_element('list1',cnt+1);
close c1;
END;
---- 在Forms 中 设 置WHEN_NEW_FORM_INSTANCE 触 发 器 并 调 用 此 过 程, 即 完 成 了 此 工 作。 其 结 果 显 示 如 图2 所 示。
查看本文来源