分享
 
 
 

OracleDP2000应用技巧

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Oracle 公 司 作 为 全 球 最 大 的 数 据 库 厂 商 之 一, 其 数 据 库 系 统 是 优 秀 的 数 据 库 管 理 系 统, 在 大 型 系 统 象 保 险、 金 融 等 部 门 的 广 泛 应 用 是 众 所 周 知 的, 但 其 数 据 库 前 端 开 发 工 具DEVEPER/2000 在 业 界 中 介 绍 的 却 相 对 较 少。 其 实 其 开 发 工 具Developer/2000 也 是 一 功 能 强 大 的、 方 便 灵 活 的 开 发 工 具。Developer/2000 在 构 建 企 业 管 理 信 息 系 统 上, 其 编 程 简 便、 开 发 周 期 短、 维 护 方 便 等 优 势 更 是 软 件 开 发 商 所 中 意 之 处, 笔 者 所 在 公 司 在 开 发 社 保 系 统 中 就 采 用Developer/2000, 在 辽 宁 省 的 应 用 中 取 得 良 好 效 果。 下 面 就 本 人 在Developer/2000 开 发 社 保 系 统 中 所 遇 问 题 与 各 位 进 行 交 流。

---- 1. Developer/2000 FROMS 4.5 中 的" 宏" 代 换

---- 在 早 期FOXPRO 数 据 库 编 程 中, 经 常 用 到 宏 代 换 功 能, 但 在FORMS 中 却 没 有 此 功 能, 象"&","*" 等 在 编 程 中 经 常 用 到 的, 在FORMS 中 只 得 一 行 一 行 代 码 的 写, 但 后 来 发 现FORMS 中 也 有 类 似 功 能, 用NAME_IN()、COPY() 可 以 实 现 类 似 的 功 能。Name_in() 用 于 取 出 参 数 名 代 表 的 对 象 了 数 值, 而COPY() 把 一 个 参 数 值 传 递 给 另 一 参 数 值 表 示 的 对 象。 的 如 下 例:

FORM 结 构:

块B

项 L1,L2,L3,L4,L5,L6

在 作 录 入 程 序 时 要 对L1。。。L6 项 清 零

DELCATE

strItemName varchar2(20);

BEGIN

for I in 1 …6 loop

strItemName:=':b.l"||to_char(i);

copy(null,strItemNmae);

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||'sj.dwjtc')

name_in(pre_block_name||'yj.dwjtc') or

name_in(pre_block_name||'sj.dwjzh')

name_in(pre_block_name||'yj.dwjzh') or

name_in(pre_block_name||'sj.grjf')

name_in(pre_block_name||'yj.grjf') then

message(' 实 缴 大 于 应 缴');

return false;

end if;

return true;

END;

---- 从 上 面 的 两 个 例 子 来 看NAME_IN 和COPY 的 应 用 能 起 到 其 它 编 程 语 言 的" 宏" 代 换 功 能, 代 码 的 优 化 方 面 确 实 能 起 不 少 的 作 用, 减 少 了 程 序 源 代 码 的 维 护 工 作。

2. 用FORMS 实 现ORACLE 数 据 库 与 其 它 数 据 源 数 据 的 交 换

---- Developer/2000 不 能 实 现 同 时 多 数 据 源 的 同 时 连 接, 在 多 系 统 和 异 种 数 据 源 的 操 作 中 功 能 确 实 大 打 折 扣, 虽 然 可 以 用3GL 加ODBC 作 一DLL 应 用 能 实 现, 但 一 般 的 应 用 中 又 有 点 没 用 必 要 作 的 那 么 复 杂。 实 际 上Developer/2000 内 嵌 包TEXT_IO 为 我 们 提 供 了 一 个 更 简 单 的 方 法。 几 乎 所 有 的 数 据 库 或 数 据 库 前 端 开 发 工 具 都 提 供 文 本 文 件 的 操 作, 这 样 我 们 完 全 可 以 用 文 本 文 件 作 为 数 据 交 换 的 通 用 格 式。 下 例 是 在 保 险 业 中 的 一 应 用:( 要 用 到d2kwfile.dll 应 用)

DECLARE

filename varchar2(128):=null;

filenum text_io.file_type;

linebuf varchar2(100);

r_temp temp%rowtype;

BEGIN

filename:=d2k_file_dialog.show

('请选择缴费工资台帐原文件','c:\','源文件(*.txt)|*.txt|');

if filename is null then

raise form_trigger_failure; end if;

filenum:=text_io.fopen(filename,'r');

loop

BEGIN

text_io.get_line(filenum,linebuf);

TEXT_IO.PUT(linebuf);TEXT_IO.NEW_LINE;

exception when no_data_found then

exit;

END;

BEGIN

v_temp.l1=substr(linebuf,1,9);

v_temp.l2:= to_number(substr(linebuf,10,5));

insert into temp(l1,l2) values (v_temp.l1,v_temp.l2);

exception when others then

END;

null;

end loop;

END;

---- 3. FORMS 4.5 实 现 的 列 表 查 询、 多 行 录 入 中 的 实 现 行 累 计

---- 在PB 和VB 中 都 用 类 似 的 求 和 或 者 说 累 计 列, 但 在 早 期 的FORMS4。5 中 没 有 此 功 能, 对 于 多 条 记 录 的 录 入 中 需 要 进 行 求 和 时 很 不 方 便, 其 实 利 用FORM 的 触 发 子 很 容 易 实 现。 如 下 例:

块:b1 项:l1,l2.l3,l4

块:b2 项:l1,l2,l3,l4

块b2是B1的求和块

在块B1中的PRE_TEXT_ITEM中代码:

IF SUBSTR(:SYSTEM.CURRENT_ITEM,1,1) IN ('L') THEN

:GLOBAL.ITEM_PREVALUES:=NAME_IN

('B1.'||:SYSTEM.CURRENT_ITEM);

END IF;

在块 B2中的POST_TEXT_ITEM中代码:

DECLARE

num_cz number; --数据项在录入或修改前后的差值

num_hz number; --数据项在修改后的求合

BEGIN

if substr(:system.current_item,1,1) in ('l') then

:global.item_nextvalues:=name_in

('b1.'||:system.current_item);

num_cz:=nvl(to_number(:global.item_nextvalues),0)-

nvl(to_number(:global.item_prevalues),0);

--新的和值

num_hz:=nvl(to_number(name_in('b_sum.'

||:system.current_item)),0)+num_cz;

copy(to_char(num_hz),'b2.'||:system.current_item);

end if;

END;

---- 通 过 前 后 两 值 的 比 较 很 容 易 的 实 现 一 个 较 通 用 的 求 和 算 法, 另 外 又 一 次 用 到NAME_IN 和 COPY , 减 少 了 代 码 量。 在 块 上 实 现 触 发 子 也 减 少 了 代 码 维 护 工 作 量。

---- 4. REPORT 2.5 中 实 现 的 动 态 报 表( 一 张 表 利 用 多 个QUERY 语 句, 生 成 一 样 格 式 的 多 张 报 表

---- 在 做 报 表 时 经 常 要 遇 到 类 似 的 报 表 有 多 张 的 情 况, 虽 然 通 过 简 单 的 拷 贝 可 以 减 少 编 程 的 工 作 量, 但 在 后 期 的 维 护 中 却 增 加 了 难 度, 一 张 表 改 完 后 又 改 另 一 张 表, 进 行 大 量 的 重 复 劳 动 不 是 每 个 程 序 员 想 做 的 工 作。 其 实 在REPORT 2。5 中 有 一 很 好 的 功 能 可 能 完 成 这 样 的 工 作。 就 是REPORT 的" 宏" 代 换。 如 下 例:

两个表:tab_temp1 (a number,b number,c number)

tab_temp2 (d number,e number,f number)

---- 作 两 张 报 表, 表 头 一 样, 但 查 询 不 一 样, 分 别 取 自 两 个 表

建 一 用 户 参 数(user parameters) p_1 类 型 CHAR 长 度 200, 缺 省 值 是 SELECT A,B,C FROM TAB_TEMP

建 一 查 询(QUERIES), 在 查 询 语 句 中 输 入:&P_1

生 成 布 局, 可 按 要 求 画 出 报 表。

---- 因 在 查 定 义 中 用 的 是&p_1 定 义, 所 以 可 以 在 运 行 时 动 态 的 给P_1 传 递 能 数 只 要 能 满 足 其 列 名 定 义 即 可, 例 可 用 如 下 语 句 代 入P_1

SELECT D A,E B,F C FROM TAB_TEMP2

---- 这 样 就 生 成 了 一 个 多 功 能 报 表, 把 编 写REPROT 工 作 从 简 单 的 布 局 编 辑 中 解 脱 出 来, 而 投 入 到 实 质 性 的 工 作SQL 语 句 的 生 成 上 去。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有