Developer开发文章 Oracle 联系客服

发布时间 : 星期日 文章Developer开发文章 Oracle更新完毕开始阅读

F3 KEY-DUP-ITEM DUPLICATE_ITEM; 复制项 F4 KEY-DUPREC DUPLICATE_RECORD; 复制记录 F5 KEY-MENU BLOCK_MENU; 块导航菜单 F6 KEY-CREREC CREATE_RECORD; 插入记录 F7 KEY-ENTQRY ENTER_QUERY; 输入查询条件 F8 KEY-EXEQRY EXECUTE_QUERY; 运行查询 F9 KEY-LISTVAL LIST_VALUES; 显示LOV F10 KEY-COMMIT COMMIT; 存盘 Enter、Tab KEY-NEXT-ITEM NEXT_ITEM; 下一项 SHIFT+TAB KEY-PREV-ITEM PREVIOUS_ITEM; 前一项 Ctrl+Q KEY-EXIT EXIT_FORM; 退出/取消查询

20 FORM中,触发子exit_form的两种功能是什么?

1、退出FORM

exit_form;

2、取消查询

if :System.Mode = 'ENTER-QUERY' then exit_form; end if;

21 FORM中如何存取图象?如何把图象从一个表中导到另一个表中?

1、SQL*Plus中

SQL> create table t_photo1(photo1 long raw); SQL> create table t_photo2(photo2 long raw); 2、硬盘上c:\\下有一个图象文件tmp.bmp

3、打开FORM

新建两个块:t_photo1、t_photo2

t_photo1块是数据库块,连接的表是数据库中的一个表t_photo1

t_photo2块也是数据库块,连接的表是数据库中的另一个表t_photo2(备份表) t_photo1块上新建一个图象项,名为photo1,对应的是即表t_photo1中的photo1列 t_photo2块上也新建一个图象项,名为photo2,对应的是即表t_photo2中的photo2列 新建一按钮1,输入以下程序,这个按钮实现读入图象到表里,即录入图象到表里 BEGIN

GO_BLOCK('t_photo1');--到块1

READ_IMAGE_FILE('c:\\tmp.bmp','bmp','t_photo1.photo1');

--读入外部图象文件tmp.bmp(图象类型为BMP)到t_photo1块的photo1项,也就是到了t_photo1表里 COMMIT;--存盘

END;

新建一按钮2,输入以下程序,这个按钮实现图象的倒表(t_photo1到t_photo2) BEGIN

GO_BLOCK('t_photo1');--到块1 execute_query;

--查询出表中的图象,这时,表中的图象到了FORM中的图象项上 WRITE_IMAGE_FILE('c:\\tmp.bmp','bmp','t_photo1.photo1');

--把图象项中图象写入外部图象文件tmp.bmp GO_BLOCK('t_photo2');--到块2

READ_IMAGE_FILE('c:\\tmp.bmp','bmp','t_photo2.photo2');

--把外部图象文件tmp.bmp读入到t_photo2块的photo2项,也就是到了t_photo2表里 COMMIT;--存盘

END;

运行此程序,点击此按钮观察效果。

注释:t_photo1.photo1是正式图片表中的图象项(数据库项)(t_photo1块photo项1) t_photo2.photo2是备份图片表中的图象项(数据库项)(t_photo2块photo项2)

22 FORM中如何存取声音?

1、 2、

硬盘上c:\\下有一个声音文件tmp.wav 打开FORM

新建一个块:t_sound

t_sound块上新建一个声音项,名为sound1 新建一按钮1,输入以下程序 BEGIN

GO_ITEM('sound1');

READ_SOUND_FILE('c:\\tmp.wav','wave','sound1'); PLAY_SOUND('sound1');

END;

运行此程序,点击此按钮观察效果。

23 FORM中,当用鼠标点击标签画布的某一“标签页”时,如何判断点击的是哪一页?

1. 在Form级触发器中添加触发WHEN-TAB-PAGE-CHANGED 2. 在此触发器中写如下代码: DECLARE

canvas_id VARCHAR2(30);

--标签页ID

BEGIN

canvas_id := GET_CANVAS_PROPERTY('标签画布名', topmost_tab_page); IF canvas_id='标签页1' then go_block('块1');end if; IF canvas_id='标签页2' then go_block('块2');end if; IF canvas_id='标签页3' then go_block('块3');end if; execute_query;

END;

24 FORM中,常用快捷键有哪些?

CTRL+S 保存 CTRL+T 编译文件 CTRL+R 运行FORM CTRL+J 连接

F1 F2 F4

调用帮助 布局编辑器 属性选项板

25 如何发布Developer/2000应用程序?

26 FORM中,点击按钮实现字段排序?

27 为什么在触摸屏上,我的按纽不响应我的“按”动作?

28 为什么我的FMX程序里没有Message line?

29 FORM中,如何设置水平滚动条?

30 FORM中,触发子POST-CHANGE的作用

31 FORM中,触发子WHEN-VALIDATE-ITEM的作用

32 FORM中,触发子POST-QUERY的作用

33 怎样在form中使用宏?

在 早 期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\ 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 的 应 用 能 起 到 其 它 编 程 语 言 的\宏\代 换 功 能, 代 码 的 优 化 方 面 确 实 能 起 不 少 的 作 用, 减 少 了 程 序 源 代 码 的 维 护 工 作。

34 Oracle中Forms与Reports的集成

Oracle产品Developer 2000中包括多种开发工具,其中在具体工作时用得最多的是Forms和Reports。Forms是一个设计表单的工具,利用它可以灵活方便地定义各种表单对象,以简化用户在运行期对相关数据库的操作(查询、插入、删除和更新等);Reports则是一个设计报表的工具,利用它可以按照用户的要求方便地生成报表。

在Oracle应用系统中,大量的具有交互性的功能是由Forms实现的。利用Forms所生成的表单模块可以彼此调用,实现业务流程的控制并完成与数据库有关的复杂操作;而由Reports所设计的报表模块往往当做最底层的功能被表单模块所调用。对于一些Oracle用户来说,独立地用好Forms或Reports是没有问题的,但他们却很少考虑如何使二者有机地结合起来,利用Forms对数据操纵的灵活性,由Forms模块向Reports模块传送大量结构化或非结构化的实时数据,减少(或避免)Reports对数据库的访问,从而高速地生成报表并保证报表数据与表单数据的一致性。本文通过实例介绍一种利用Forms的封装例程RUN_PRODUCT( )在Forms模块中集成Reports模块的方法,利用该方法可以把Forms和Reports有机地结合起来,减少不必要的操作,提高工作效率。

RUN_PRODUCT例程

在Forms模块中调用Reports模块,最有效的方法是利用Forms的封装例程RUN_PRODUCT()。目前,很多程序开发人员在Forms模块中调用Reports模块时,或者没有采用这一例程,或者虽然采用这一例程但并没有充分利用参数表来传递表单中现成的数据,或者只是利用参数表来传递少量的文本参数(非结构化数据)作为Reports中的查询条件,报表的数据仍然要从数据库中查询得到,