




已阅读5页,还剩74页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1Developer/2000中各键盘触发子所对应的“按键”22FORM中,当光标走到块的最后一项时,如何让按“enter回车”键时,光标自动走到下一条记录的第一项?33如何在启动FORM程序时直接登录到Oracle数据库上?34FORM中,如何通过 ODBC 访问 Acress 数据?35从FORM中调用REPORT时,如何使打印结果直接输出到打印机上?46FORM调用REPORT时,如何去掉report server?47FORM中,如何实现屏幕同步刷新?48在Developer/2000中如何读写文本型操作系统文件?49如何改变FORM(FMX模块)运行时的title?510FORM中,如何修改系统提示信息(默认英文)为中文?511FORM中,怎样创建动态下拉列表List?612FORM中,如何引入图像,制作封面?713运行FORM时,如何使按钮变灰(即无效)?714FORM中,设置应用特性(光标类型)715运行FORM时,如何使窗口(runtime窗口、画布窗口)自动变成最大化、最小化?716FORM中,WINDOW标题的设置717FORM中,Exception(例外)都有哪些,如何书写?818如何在FORM运行中,使定制菜单中的“窗口(W)”菜单项不显示?819FORM中,如何屏蔽默认的功能键?820FORM中,触发子exit_form的两种功能是什么?921FORM中如何存取图象?如何把图象从一个表中导到另一个表中?922FORM中如何存取声音?1023FORM中,当用鼠标点击标签画布的某一“标签页”时,如何判断点击的是哪一页?1024FORM中,常用快捷键有哪些?1025如何发布Developer/2000应用程序?1126FORM中,点击按钮实现字段排序?1127为什么在触摸屏上,我的按纽不响应我的“按”动作?1128为什么我的FMX程序里没有Message line?1129FORM中,如何设置水平滚动条?1130FORM中,触发子POST-CHANGE的作用1131FORM中,触发子WHEN-VALIDATE-ITEM的作用1132FORM中,触发子POST-QUERY的作用1133怎样在form中使用宏?1134如何调用外部操作系统命令?1335临时表的作用1336FORM中,怎样使用KEY-Fn(n=0.9)触发子?1337用户出口函数USER_EXIT如何编写?1338如何从REPORT中调用FORM、GRAPHICS程序?1339如何从GRAPHICS中调用FORM、REPORT程序?1340Oracle中Forms与Reports的集成1341在DEVELOPER2000中利用DDE将数据倒入到EXCEL文件中的方法1642使用设置菜单项属性及form 数据项属性限制不同用户的访问范围2043提高表连接的查询速度2044利用用库模块实现模块资源共享2045易导致查询数据错误的原因2046使用视图组织报表数据简单且易于维护2047给报表加序号的简单办法2148用FORMS 实 现ORACLE 数 据 库 与 其 它 数 据 源 数 据 的 交 换2149FORMS 4.5 实 现 的 列 表 查 询、 多 行 录 入 中 的 实 现 行 累 计2250REPORT 2.5 中 实 现 的 动 态 报 表( 一 张 表 利 用 多 个QUERY 语 句, 生 成 一 样 格 式 的 多 张 报 表2251如何屏蔽系统提示信息?2352在编写PL/SQL代码中使用SELECT语句时如何避免例外发生?2353当使用主从块时,如何使从块自动提交?2354如何减少FORM所占磁盘空间?2355如何使定制菜单的主菜单中WINDOWS项不显示?2356如何使不同布局的报表显示在同一页上?2357怎样较快的生成FMX文件?2458如何在FORM中同时加入水平与垂直滚动条?2459如何在告警框内显示message信息?2460如何一次退出所有FORM?2561如何在FORM与REPORT之间传递参数?2562从FORM调用REPORT时,如何使REPORT以满屏方式显示?2663如何关闭REPORT运行时的参数窗口?2664在Oracle中实现报表的定长输出2765Developer/2000 FROMS 4.5 中 的 宏 代 换2866用FORMS 实 现ORACLE 数 据 库 与 其 它 数 据 源 数 据 的 交 换2967FORMS 4.5 实 现 的 列 表 查 询、 多 行 录 入 中 的 实 现 行 累 计3068REPORT 2.5 中 实 现 的 动 态 报 表( 一 张 表 利 用 多 个QUERY 语 句, 生 成 一 样 格 式 的 多 张 报 表3169用ORACLE*Forms 和ORACLE*Graphics实现数据与图形动态显示3170数字分金额转成大写汉字元金额程序!331 Developer/2000中各键盘触发子所对应的“按键”封装过程键触发子含义对应按键ABORT_QUERY Key-EXIT退出/取消BLOCK_MENUKey-MENU块菜单F5CLEAR_BLOCK Key-CLRBLK清空块Shift+F5CLEAR_FORMKey-CLRFRM清空FORMShift+F7CLEAR_RECORDKey-CLRREC清空记录Shift+F4COMMIT_FORM Key-COMMIT提交/存盘 F10COUNT_QUERY Key-CQUERY计算查询记录总数Shift+F2CREATE_RECORD Key-CREREC插入新记录F6DELETE_RECORD Key-DELREC删除记录Shift+F6DOWNKey-DOWN下滚记录Ctrl+l、下箭头DUPLICATE_ITEMKey-DUP-ITEM复制域/项 F3DUPLICATE_RECORDKey-DUPREC复制记录F4EDIT_TEXTITEM Key-EDIT打开编辑器Ctrl+EENTER Key-ENTEREnterENTER_QUERY Key-ENTQRY输入查询条件F7EXECUTE_QUERY Key-EXEQRY执行查询F8EXIT_FORM Key-EXIT退出/取消查询 Ctrl+QHELPKey-HELP帮助F1LIST_VALUES Key-LISTVAL显示值列表LOV F9LOCK_RECORD Key-UPDRECLock RecordNEXT_BLOCKKey-NXTBLK下一块Ctrl+Page DownNEXT_ITEM Key-NEXT-ITEM下一域/项 Ctrl+Tab、Tab、EnterNEXT_KEYKey-NXTKEY定位到下一个主键项Shift+F3NEXT_RECORD Key-NXTREC下一条记录Shift+DownNEXT_SETKey-NXTSET下一个记录集Ctrl+PREVIOUS_BLOCKKey-PRVBLK前一块Ctrl+Page UpPREVIOUS_ITEM Key-PREV-ITEM前一域/项 Shift+Tab、Shift+Ctrl+TabPREVIOUS_RECORD Key-PRVREC前一条记录Shift+UpPRINT Key-PRINT打印当前屏幕Shift+F8SCROLL_DOWN Key-SCRDOWN下翻屏Page DownSCROLL_UP Key-SCRUP上翻屏Page UpUPKey-UP上滚记录Ctrl+p、上箭头Esc 取消Backspace 向后删除Ctrl+U清除域/项Ctrl+F1 显示有效的功能键列表Shift+F1发生错误时,显示错误窗口2 FORM中,当光标走到块的最后一项时,如何让按“enter回车”键时,光标自动走到下一条记录的第一项?设置块属性导航器风格:改变记录 3 如何在启动FORM程序时直接登录到Oracle数据库上?1、 调入Form Builder,打开一个新的FORM2、 在表格级新建一个ON_LOGON触发器3、 在ON_LOGON里输入以下代码:DECLAREPASS1 VARCHAR2(80); -PASS1为密码参数BEGINLOGON(USER1,USER1|TNS1);SELECT PASS INTO PASS1 FROM T_PASSWORD WHERE USERNAME=USER2;LOGOUT;LOGON(USER2,PASS1|TNS1);END;4 FORM中,如何通过 ODBC 访问 Acress 数据?1. 在控制面板中选取 ODBC 控制源2. 系统 DSN3. 添加(D).4. 选定您需要的驱动程序来安装数据源(S):Microsoft Acress Driver (*.mdb)5. 完成(F)6. Date Source Name:aaa(aaa就是数据源名称,也就是在应用程序中所要使用的)7. 选择一个mdb数据库文件(select)8. 高级属性:设置用户名、口令9. OK10. 打开一个FORM11. 文件(F)连接(E)12. 用户名/口令odbc:aaa13. 连接(O)5 从FORM中调用REPORT时,如何使打印结果直接输出到打印机上?在parameter list中加入parameter_form=NoAdd_parameter(list_id,PSRAMETER_FORM,TEXT_PARAMETER,NO);6 FORM调用REPORT时,如何去掉report server?Add_parameter(list_id,ORACLE_SHUTDOWN,TEXT_PARAMETER,YES);7 FORM中,如何实现屏幕同步刷新?现象说明: FORM中,在做一连串大的操作时,有时希望用message来显示提示信息,但屏幕却不刷新,解决方法: message(信息1);synchronize;(同步屏幕显示)message(信息2);synchronize; 8 在Developer/2000中如何读写文本型操作系统文件?PL/SQL 3.3以上的版本中,UTL_FILE包允许用户通过PL/SQL读写操作系统文件。如下: declarefile_handle utl_file.file_type;beginfile_handle:=utl_file.fopen(C:,TEST.TXT,A);-TEST.TXT是文件名utl_file.put_line(file_handle,写入的信息);utl_file.fclose(file_handle);end;Developer/2000中,可以用Text_IO读写操作系统文件。如下: DECALREin_fileText_IO.File_Type;out_fileText_IO.File_Type;BEGINin_file:=Text_IO.Fopen(文件名, R);Text_IO.Get_Line(in_file,linebuf);Text_IO.Fclose(in_file);out_file:=Text_IO.Fopen(文件名, W);Text_IO.Put_Line(out_file,写入信息);Text_IO.Fclose(out_file);END;-常用TEXT_IODeclare out_file text_io.file_type;-定义Begin out_file:=text_io.fopen(prn,w);-打开文件prn text_io.new_line(out_file, );-新建一行 text_io.put_line(out_file, )-写入一行 text_io.fclose(out_file);-关闭文件End;-文本输入输出 TEXT_IO TEXT_IO.PACKAGE TEXT_IO.FCLOSE TEXT_IO.FILE_TYPE TEXT_IO.FOPEN TEXT_IO.IS_OPEN TEXT_IO.GET_LINE TEXT_IO.NEW_LINE TEXT_IO.PUT TEXT_IO.PUTF TEXT_IO.PUT_LINEDeclare Out_file Text_io.file_type; L Varchar2(100); L1 Varchar2(100); L2 Varchar2(100);Begin Out_file :=text_io.fopen(c:lllogin.txt,r); If text_io.is_open(Out_file) thentext_io.get_line(Out_file,L);text_io.get_line(Out_file,L1);text_io.get_line(Out_file,L2); Else Null; End if;End;9 如何改变FORM(FMX模块)运行时的title?1、 Developer/2000中FMX默认title为:Developer/2000 Forms Runtime for Windows 95 / NT2、 在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE3、 在此触发器中写如下代码:4、 SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW,TITLE,您的提示);10 FORM中,如何修改系统提示信息(默认英文)为中文?1、 调入Form Builder,打开一个新的FORM2、 在表格级新建一个ON_ERROR触发器3、 在ON_ERROR里输入以下代码:beginif error_code=40100 then message(已在第一 条记录!);elsif error_code=40102 then message(您已在最后一条记录,请先输入处理此记录,然后再输入下一条记录!);elsif error_code=40200 then message(此项仅用于查询参考,您无法更改此项!);elsif error_code=40202 then message(此项必须输入! 产生错误原因:您未输入值,或您删去了原有值!);elsif error_code=40203 then message(值必须输入完全! 产生错误原因:该项有定长要求!);elsif error_code=40207 then message(您输入的值不在有效范围之内,请输入有效范围之内的值!);elsif error_code=40401 then message(您没有修改或输入任何新的记录,无须保存!);elsif error_code=40508 then message(编码不能相同,不能有相同编码的记录,编码必须唯一!);elsif error_code=40509 then message(严重操作错误!,您可能输入了一个空的记录,无法保存记录!);elsif error_code=41802 then message(您只能在输入新的记录时使用复制记录键,来复制上一条记录!);else message(error_type|_|to_char(error_code)|:|error_text);end if;raise form_trigger_failure;end;11 FORM中,怎样创建动态下拉列表List?1、打开Form Builder2、文件(F)新建(N)表格(F)3、新建一个非数据块,取名为tool4、鼠标右键布局编辑器(E)5、建一个列表项,名为xl(属于tool块)6、新建一过程,内写如下的代码PROCEDURE create_xl IS-动态显示学历过程CURSOR A IS SELECT DISTINCT(xl) FROM t_xl;-建立a游标,从学历档案表取原始数据(有可能动态变化)CNT NUMBER;-记录总数变量,用于生成列表的总项数i NUMBER;-循环变量TNAME t_%TYPE;-TNAME变量和t_xl表中name项具有相同的结构BEGINCLEAR_LIST(tool.xl);-清空列表tool.xl(tool块上的xl项)SELECT COUNT(DISTINCT(name) INTO CNT FROM t_xl;-计算列表总数OPEN A; -打开游标FOR i IN 1.CNT LOOP-开始循环FETCH A INTO TNAME; -取数EXIT WHEN A%NOTFOUND; -退出条件ADD_LIST_ELEMENT(tool.xl,i,TNAME,TNAME);-把查询出的值加入列表中(序号,实际值,显示值)END LOOP; -结束循环CLOSE A;-关闭游标END;7、在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE 在此触发器中写如下代码:create_xl; 使FORM程序一启动,就调用此过程,达到动态生成下拉列表List的效果。附:-学历档案表create table t_xl(name varchar2(6);insert into t_xl values(小学);insert into t_xl values(初中);insert into t_xl values(职高);insert into t_xl values(技校);insert into t_xl values(高中);insert into t_xl values(中专);insert into t_xl values(大专);insert into t_xl values(本科);insert into t_xl values(研究生);commit;12 FORM中,如何引入图像,制作封面?1、 打开Form Builder2、 文件(F)新建(N)表格(F)3、 鼠标右键布局编辑器(E)4、 文件(F)导入(I)图象(I)5、 可调入作好的图像,以制作封面。6、 所支持的图像格式有:TIF、JPG、BMP、TGA、PCX、PCT、GIF、CAL、RAS、OIF、PCD等13 运行FORM时,如何使按钮变灰(即无效)?set_item_property(按钮名称,ENABLED,PROPERTY_FALSE);14 FORM中,设置应用特性(光标类型)在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCESET_APPLICATION_PROPERTY(CURSOR_STYLE,CROSSHAIR|BUSY|HELP|DEFAULT|INSERTION);15 运行FORM时,如何使窗口(runtime窗口、画布窗口)自动变成最大化、最小化?1. 在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE2. 在此触发器中写如下代码:SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW,WINDOW_STATE,MAXIMIZE);-最大化SET_WINDOW_PROPERTY(FORMS_MDI_WINDOW,WINDOW_STATE,MINIMIZE);-最小化16 FORM中,WINDOW标题的设置1. 在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCESET_WINDOW_PROPERTY(FORMS_MDI_WINDOW, title,你要写的标题);或用以下方法2. 对象导航器窗口WINDOW0(窗口的名字)属性标题修改其属性17 FORM中,Exception(例外)都有哪些,如何书写?BEGINPL/SQL块;Exceptionwhen no_data_found then-没有找到数据响应命令;when too_many_rows then-返回多行,隐式光标每次只能检索一行数据响应命令;when invalid_number then-字符向数字转换失败响应命令;when zero_divide then-被零除响应命令;when dup_val_on_index then-向唯一索引中插入重复数据响应命令;when invalid_cursor then-非法游标操作响应命令;when value_error then-数字的,数据转换,截字符串或强制性的错误响应命令;when others then-发生其它任何错误null;-选择一:什么也不做,就当错误没发生raise form_trigger_failure;-选择二:挂起当前程序END;18 如何在FORM运行中,使定制菜单中的“窗口(W)”菜单项不显示?对象导航器窗口WINDOW0(窗口的名字)属性模式修改其属性 设置窗口属性:模式=是19 FORM中,如何屏蔽默认的功能键?1. 在Form级触发器中添加触发KEY-OTHERS2. 在此触发器中写如下代码: null;3. 这样FORM程序运行后,大部分的功能键都被屏蔽(包括一些必需键,如:上箭头、下箭头、退出.), 要想让这些键再恢复功能,就为这些键各自编程: 按键触发器代码 说明 上箭头KEY-DOWNDOWN; 上滚记录 下箭头KEY-UPUP; 下滚记录 Page Up KEY-SCRUP SCROLL_UP;上翻屏 Page Down KEY-SCRDOWN SCROLL_DOWN;下翻屏 F1KEY-HELPHELP; 显示帮助 F3KEY-DUP-ITEMDUPLICATE_ITEM; 复制项 F4KEY-DUPRECDUPLICATE_RECORD; 复制记录 F5KEY-MENUBLOCK_MENU; 块导航菜单 F6KEY-CRERECCREATE_RECORD;插入记录 F7KEY-ENTQRYENTER_QUERY;输入查询条件 F8KEY-EXEQRYEXECUTE_QUERY;运行查询 F9KEY-LISTVAL LIST_VALUES;显示LOV F10 KEY-COMMITCOMMIT; 存盘 Enter、TabKEY-NEXT-ITEM NEXT_ITEM;下一项 SHIFT+TAB KEY-PREV-ITEM PREVIOUS_ITEM;前一项 Ctrl+QKEY-EXITEXIT_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.bmp3、打开FORM新建两个块:t_photo1、t_photo2t_photo1块是数据库块,连接的表是数据库中的一个表t_photo1t_photo2块也是数据库块,连接的表是数据库中的另一个表t_photo2(备份表)t_photo1块上新建一个图象项,名为photo1,对应的是即表t_photo1中的photo1列t_photo2块上也新建一个图象项,名为photo2,对应的是即表t_photo2中的photo2列新建一按钮1,输入以下程序,这个按钮实现读入图象到表里,即录入图象到表里BEGINGO_BLOCK(t_photo1);-到块1READ_IMAGE_FILE(c:tmp.bmp,bmp,t_photo1.photo1);-读入外部图象文件tmp.bmp(图象类型为BMP)到t_photo1块的photo1项,也就是到了t_photo1表里COMMIT;-存盘END;新建一按钮2,输入以下程序,这个按钮实现图象的倒表(t_photo1到t_photo2)BEGINGO_BLOCK(t_photo1);-到块1execute_query;-查询出表中的图象,这时,表中的图象到了FORM中的图象项上WRITE_IMAGE_FILE(c:tmp.bmp,bmp,t_photo1.photo1);-把图象项中图象写入外部图象文件tmp.bmpGO_BLOCK(t_photo2);-到块2READ_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、 硬盘上c:下有一个声音文件tmp.wav2、 打开FORM新建一个块:t_soundt_sound块上新建一个声音项,名为sound1新建一按钮1,输入以下程序BEGINGO_ITEM(sound1);READ_SOUND_FILE(c:tmp.wav,wave,sound1);PLAY_SOUND(sound1);END;运行此程序,点击此按钮观察效果。23 FORM中,当用鼠标点击标签画布的某一“标签页”时,如何判断点击的是哪一页?1. 在Form级触发器中添加触发WHEN-TAB-PAGE-CHANGED2. 在此触发器中写如下代码:DECLAREcanvas_id VARCHAR2(30);-标签页IDBEGINcanvas_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运行FORMCTRL+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|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 BEGINif 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中的查询条件,报表的数据仍然要从数据库中查询得到,这样既增加了数据库服务器的负载,又增加了网络的流量,而且报表生成的速度慢,丧失了数据的实时性与一致性。因此,深入了解并熟练掌握参数表的使用方法便显得非常重要。在使用RUN_PRODUCT( )之前要先建立参数表,并向参数表中添加参数。RUN_PRODUCT( )的使用格式如下: RUN_PROCDUT(REPORTS, report_name, SYNCHRONOUS, RUNTIME, FILESYSTEM, pl_id, NULL); 其中各参数含义如下: REPORTS:说明被调模块是报表模块; report_name:被调模块的完整路径名; SYNCHRONOUS: 说明被调模块以同步的通信方式运行(被调模块退出之后主调模块才能继续执行,否则为ASYNCHRONOUS,即异步方式); RUNTIME:说明被调模块的执行方式为前台方式(否则为BATCH,即后台方式); FILESYSTEM:说明被调模块的存储位置是文件系统(否则为DATABASE,即数据库系统); pl_id:用户定义的参数表标识符。 使用参数表的要领 由Forms模块向Reports模块传递的数据可分为两类:一类是非结构化数据,即报表表头(表尾)的数据;另一类是结构化数据,即报表表目的二维数据。在如图1所示的报表中,学年、学期、班级编号、班级名称、专业名称、课程编号、课程名称、学分、班级人数等,属于表头数据;而学号、姓名、性别、修读性质、平时成绩、考试成绩、总评成绩、任课教师等属于表目数据。 图1 Reports模块执行情况参数表中的参数有两种,文本参数(TEXT_PARAMETER)和数据参数(DATA_PARAMETER)。文本参数是对字符型数据的引用,数据参数是对记录组的引用。对于非结构化数据,可借文本参数将数据加入参数表(注意:文本参数只接受字符型数据,对于其他类型的数据要通过TO_CHAR( )函数先转化为字符型数据);而对于结构化数据,则先要将数据存入记录组(RECORD_GROUP),然后借数据参数才能将数据加入到参数表中。注意:Forms模块的记录组中的各列和Reports模块中的查询(QUERY)对象的各列在名称、类型和顺序上要完全一致。这里文本参数是字符串指针,数据参数是记录组(结构数组)的指针,而参数表则是存储上述指针的指针数组。如果RUN_PRODUCT( )的参数表中未加入与Reports模块中的查询对象同名的数据参数,则Reports 从数据库中查找与其模块中的查询对象相匹配的数据;如果RUN_PRODUCT( ) 的参数表中加入了与Reports模块中的查询对象同名的数据参数,则Reports 并不从数据库中查找数据,而是以参数表中的同名数据参数所引用的记录组作为其模块中的查询对象的数据源,在这种情况下,Reports查询对象的SELECT语句所映射的数据集合是不起作用的。 实现集成的具体方法 本文例子中用Forms模块来对学生的期末成绩进行管理,Forms模块运行如图2所示。 其中: 标以单位、班级、课程、成绩的各个块对象间存在级联的主从关系; 各个块对象中,有的项因不需要使用人员予以关注,故将其定义为非显示项,未在画布(canvas)上显示,但这并不影响对它们的引用,例如,班级块中的班级编号(BJBH),课程块中的课程编号(KCBH)等; 标以课程的块对象是基于视图(view)而非基于表(table)的; 画布上显示的项并非都是基表项(块对象所基于的表或视图中的列),而是通过触发子从其他的表或视图中查询的,这也不影响对它们的引用,例如,课程块中的名称(MC)和学分(XF)等。 图2 Forms模块运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年汽车驾驶员(C84)职业技能鉴定试卷
- 华东师范大学《网站前台技术实验》2024-2025学年第一学期期末试卷
- 黑龙江八一农垦大学《风景建筑速写》2024-2025学年第一学期期末试卷
- 黑龙江中医药大学《国画人物》2024-2025学年第一学期期末试卷
- 2025年人力资源专员招聘考试预测题与解析
- 2025年特岗教师招聘考试初中数学教材分析与教学设计模拟题
- 2025年初级导游证考试预测题及答题技巧
- 2025年宿迁市中考化学试题卷(含答案及解析)
- 2025年第九届全国中小学“学宪法、讲宪法”知识竞赛题库及参考答案
- 2024年护士执业资格考试题库-精神科护理学专项护理技术操作试题(含答案)
- 2024至2030年中国聚脲涂料行业市场发展调研及投资前景分析报告
- 1.1 鸦片战争 课件 2024-2025学年统编版八年级历史上册
- 2024至2030年中国演播室行业市场调查研究及发展战略规划报告
- DB11∕T 420-2019 电梯安装、改造、重大修理和维护保养自检规则
- 国旗台施工合同
- 总代理授权书
- 越剧《梁山伯与祝英台》剧本
- 广东省广州市越秀区2024年八年级下学期期末英语试卷附答案
- 医疗器械售后服务能力证明资料模板
- (正式版)JBT 14449-2024 起重机械焊接工艺评定
- (正式版)HGT 4144-2024 工业用二正丁胺
评论
0/150
提交评论