Oracle 公 司 作 为 全 球 最 大 的 数 据 库 厂 商 之 一 其 数 据 库 系 统 是 优 秀 的 数 据 库 管 理 系 统 在 大 型 系 统 象 保 险 金 融 等 部 门 的 广 泛 应 用 是 众 所 周 知 的 但 其 数 据 库 前 端 开 发 工 具DEVEPER/ 在 业 界 中 介 绍 的 却 相 对 较 少 其 实 其 开 发 工 具Developer/ 也 是 一 功 能 强 大 的 方 便 灵 活 的 开 发 工 具Developer/ 在 构 建 企 业 管 理 信 息 系 统 上 其 编 程 简 便 开 发 周 期 短 维 护 方 便 等 优 势 更 是 软 件 开 发 商 所 中 意 之 处 笔 者 所 在 公 司 在 开 发 社 保 系 统 中 就 采 用Developer/ 在 辽 宁 省 的 应 用 中 取 得 良 好 效 果 下 面 就 本 人 在Developer/ 开 发 社 保 系 统 中 所 遇 问 题 与 各 位 进 行 交 流
Developer/ FROMS 中 的 宏 代 换
在 早 期FOXPRO 数 据 库 编 程 中 经 常 用 到 宏 代 换 功 能 但 在FORMS 中 却 没 有 此 功 能 象&* 等 在 编 程 中 经 常 用 到 的 在FORMS 中 只 得 一 行 一 行 代 码 的 写 但 后 来 发 现FORMS 中 也 有 类 似 功 能 用NAME_IN()COPY() 可 以 实 现 类 似 的 功 能Name_in() 用 于 取 出 参 数 名 代 表 的 对 象 了 数 值 而COPY() 把 一 个 参 数 值 传 递 给 另 一 参 数 值 表 示 的 对 象 的 如 下 例
FORM 结 构
块B
项 LLLLLL
在 作 录 入 程 序 时 要 对LL 项 清 零
DELCATE
strItemName varchar();
BEGIN
for I in … loop
strItemName:=:bl||to_char(i);
copy(nullstrItemNmae);
end loop;
END;
对 于NAME_IN 的 应 用 可 能 更 多 一 些 笔 者 在 做 社 保 软 件 时 作 保 险 缴 费 录 入 时 曾 用 它 少 写 了 许 多 代 码 当 然 代 码 的 减 少 就 义 意 味 维 护 工 作 量 的 减 少
FORM结构
养老
块YLYJ(养老应缴)
项DWJTC(单位缴统筹)DWJZH(单位缴帐户)GRJF(个人缴费)
块YLSJ (养老实缴)
项DWJTC(单位缴统筹)DWJZH(单位缴帐户)GRJF(个人缴费)
工伤
块GSYJ(工伤应缴)
项DWJTC(单位缴统筹)DWJZH(单位缴帐户)GRJF(个人缴费)
块GSSJ (工伤实缴)
项DWJTC(单位缴统筹)DWJZH(单位缴帐户)GRJF(个人缴费)
医疗
块YILYJ(医疗应缴)
项DWJTC(单位缴统筹)DWJZH(单位缴帐户)GRJF(个人缴费)
块YILSJ (医疗实缴)
项DWJTC(单位缴统筹)DWJZH(单位缴帐户)GRJF(个人缴费)
三 个 块 的 结 构 相 同 只 是 块 名 称 不 同 缴 费 时 时 行 的 操 作 也 一 样 实 缴 名 项 不 能 大 于 应 缴 不 用NAME_IN 时 只 能 写 三 段 程 序 但 用 了NAME_IN 后 只 用 一 段 写 一 个 函 数 就 能 达 到 目 的 如 下
FUNCTION FUN_JF (PRE_BLOCK_NAME
IN VARCHAR) RETURN BOOLEAN IS
BEGIN
if name_in(pre_block_name||sjdwjtc)
>name_in(pre_block_name||yjdwjtc) or
name_in(pre_block_name||sjdwjzh)
>name_in(pre_block_name||yjdwjzh) or
name_in(pre_block_name||sjgrjf)
>name_in(pre_block_name||yjgrjf) then
message( 实 缴 大 于 应 缴);
return false;
end if;
return true;
END;
从 上 面 的 两 个 例 子 来 看NAME_IN 和COPY 的 应 用 能 起 到 其 它 编 程 语 言 的 宏 代 换 功 能 代 码 的 优 化 方 面 确 实 能 起 不 少 的 作 用 减 少 了 程 序 源 代 码 的 维 护 工 作
用FORMS 实 现ORACLE 数 据 库 与 其 它 数 据 源 数 据 的 交 换
Developer/ 不 能 实 现 同 时 多 数 据 源 的 同 时 连 接 在 多 系 统 和 异 种 数 据 源 的 操 作 中 功 能 确 实 大 打 折 扣 虽 然 可 以 用GL 加ODBC 作 一DLL 应 用 能 实 现 但 一 般 的 应 用 中 又 有 点 没 用 必 要 作 的 那 么 复 杂 实 际 上Developer/ 内 嵌 包TEXT_IO 为 我 们 提 供 了 一 个 更 简 单 的 方 法 几 乎 所 有 的 数 据 库 或 数 据 库 前 端 开 发 工 具 都 提 供 文 本 文 件 的 操 作 这 样 我 们 完 全 可 以 用 文 本 文 件 作 为 数 据 交 换 的 通 用 格 式 下 例 是 在 保 险 业 中 的 一 应 用( 要 用 到dkwfiledll 应 用)
DECLARE
filename varchar():=null;
filenum text_iofile_type;
linebuf varchar();
r_temp temp%rowtype;
BEGIN
filename:=dk_file_dialogshow
(请选择缴费工资台帐原文件c:\源文件(*txt)|*txt|);
if filename is null then
raise form_trigger_failure; end if;
filenum:=text_iofopen(filenamer);
loop
BEGIN
text_ioget_line(filenumlinebuf);
TEXT_IOPUT(linebuf);TEXT_IONEW_LINE;
exception when no_data_found then
exit;
END;
BEGIN
v_templ=substr(linebuf);
v_templ:= to_number(substr(linebuf));
insert into temp(ll) values (v_templv_templ);
exception when others then
END;
< < end_loop > >
null;
end loop;
END;
FORMS 实 现 的 列 表 查 询 多 行 录 入 中 的 实 现 行 累 计
在PB 和VB 中 都 用 类 似 的 求 和 或 者 说 累 计 列 但 在 早 期 的FORMS 中 没 有 此 功 能 对 于 多 条 记 录 的 录 入 中 需 要 进 行 求 和 时 很 不 方 便 其 实 利 用FORM 的 触 发 子 很 容 易 实 现 如 下 例
块b 项llll
块b 项llll
块b是B的求和块
在块B中的PRE_TEXT_ITEM中代码
IF SUBSTR(:SYSTEMCURRENT_ITEM) IN (L) THEN
:GLOBALITEM_PREVALUES:=NAME_IN
(B||:SYSTEMCURRENT_ITEM);
END IF;
在块 B中的POST_TEXT_ITEM中代码
DECLARE
num_cz number; 数据项在录入或修改前后的差值
num_hz number; 数据项在修改后的求合
BEGIN
if substr(:systemcurrent_item) in (l) then
:em_nextvalues:=name_in
(b||:systemcurrent_item);
num_cz:=nvl(to_number(:em_nextvalues))
nvl(to_number(:em_prevalues));
新的和值
num_hz:=nvl(to_number(name_in(b_sum
||:systemcurrent_item)))+num_cz;
copy(to_char(num_hz)b||:systemcurrent_item);
end if;
END;
通 过 前 后 两 值 的 比 较 很 容 易 的 实 现 一 个 较 通 用 的 求 和 算 法 另 外 又 一 次 用 到NAME_IN 和 COPY 减 少 了 代 码 量 在 块 上 实 现 触 发 子 也 减 少 了 代 码 维 护 工 作 量
REPORT 中 实 现 的 动 态 报 表( 一 张 表 利 用 多 个QUERY 语 句 生 成 一 样 格 式 的 多 张 报 表
在 做 报 表 时 经 常 要 遇 到 类 似 的 报 表 有 多 张 的 情 况 虽 然 通 过 简 单 的 拷 贝 可 以 减 少 编 程 的 工 作 量 但 在 后 期 的 维 护 中 却 增 加 了 难 度 一 张 表 改 完 后 又 改 另 一 张 表 进 行 大 量 的 重 复 劳 动 不 是 每 个 程 序 员 想 做 的 工 作 其 实 在REPORT 中 有 一 很 好 的 功 能 可 能 完 成 这 样 的 工 作 就 是REPORT 的 宏 代 换 如 下 例
两个表tab_temp (a numberb numberc number)
tab_temp (d numbere numberf number)
作 两 张 报 表 表 头 一 样 但 查 询 不 一 样 分 别 取 自 两 个 表
建 一 用 户 参 数(user parameters) p_ 类 型 CHAR 长 度 缺 省 值 是 SELECT ABC FROM TAB_TEMP
建 一 查 询(QUERIES) 在 查 询 语 句 中 输 入&P_
生 成 布 局 可 按 要 求 画 出 报 表
因 在 查 定 义 中 用 的 是&p_ 定 义 所 以 可 以 在 运 行 时 动 态 的 给P_ 传 递 能 数 只 要 能 满 足 其 列 名 定 义 即 可 例 可 用 如 下 语 句 代 入P_
SELECT D AE BF C FROM TAB_TEMP
这 样 就 生 成 了 一 个 多 功 能 报 表 把 编 写REPROT 工 作 从 简 单 的 布 局 编 辑 中 解 脱 出 来 而 投 入 到 实 质 性 的 工 作SQL 语 句 的 生 成 上 去