Oracle数据库的操作程序_第1页
Oracle数据库的操作程序_第2页
Oracle数据库的操作程序_第3页
Oracle数据库的操作程序_第4页
Oracle数据库的操作程序_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

lDeveloper/2000中各键盘触发子所对应的“按键”错误!未定义书签。

2F0RM中,当光标走到块的最后一项时,如何让按“enter回车”键时,

光标自动走到下一条记录的第一项?错误!未定义书签。

3如何在启动FORM程序时直接登录到Oracle数据库上?错误!未定义

书签。

4FORM中,如何通过ODBC访问Acress数据?错误!未定义书签。

5从FORM中调用REPORT时,如何使打印结果直接输出到打印机上?

错误!未定义书签。

6FORM调用REPORT时,如何去掉reportserver?错误!未定义书签。

7FORM中,如何实现屏幕同步刷新?错误!未定义书签。

8在Developer/2000中如何读写文本型操作系统文件?错误!未定义书

签。

9如何改变FORM(FMX模块)运行时的title?错误!未定义书签。

10FORM中,如何修改系统提示信息(默认英文)为中文?错误!未定义书

签。

UFORM中,怎样创建动态下拉列表List?错误!未定义书签。

12F0RM中,如1何引入图像,制作封面?错误!未定义书签。

13运行FORM时,如何使按钮变灰(即无效)?错误!未定义书签。

14FORM中,设置应用特性(光标类型)错误!未定义书签。

15运行FORM时,如何使窗口(runtime窗口、画布窗口)自动变成最

大化、最小化?错误!未定义书签。

16FORM中,WINDOW标题的设置错误!未定义书签。

17FORM中,Exception(例外)都有哪些,如何书写?错误!未定义书签。

18如何在FORM运行中,使定制菜单中的“窗口(W)”菜单项不显示?错

误!未定义书签。

19F0RM中,如何屏蔽默认的功能键?错误!未定义书签。

20FORM中,触发子exit_form的两种功能是什么?错误!未定义书签。

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

错误!未定义书签。

22FORM中如何存取声音?错误!未定义书签。

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

的是哪一页?错误!未定义书签。

24FORM中,常用快捷键有哪些?错误!未定义书签。

25如何发布Developer/2000应用程序?错误!未定义书签。

26FORM中,点击按钮实现字段排序?错误!未定义书签。

27为什么在触摸屏上,我的按纽不响应我的“按”动作?错误!未定义书

签。

28为什么我的FMX程序里没有Messageline?错误!未定义书签。

29FORM中,如何设置水平滚动条?错误!未定义书签。

30FORM中,触发子POST-CHANGE的作用错误!未定义书签。

31FORM中,触发子WHEN-VALIDATE-ITEM的作用错误!未定义书

签。

32FORM中,触发子POST-QUERY的作用错误!未定义书签。

33怎样在form中使用宏?错误!未定义书签。

34如何调用外部操作系统命令?错误!未定义书签。

35临时表的作用错误!未定义书签。

36FORM中,怎样使用KEY-Fn(n=0...9)触发子?错误!未定义书签。

37用户出口函数USER_EXIT如何编写?错误!未定义书签。

38如何从REPORT中调用FORM、GRAPHICS程序?错误!未定义书

签。

39如何从GRAPHICS中调用FORM、REPORT程序?错误!未定义书

签。

40Oracle中Forms与Reports的集成错误!未定义书签。

41在DEVELOPER2000中利用DDE将数据倒入至EXCEL文件中的方

法错误!未定义书签。

42使用设置菜单项属性及form数据项属性限制不同用户的访问范围

错误!未定义书签。

43提高表连接的查询速度错误!未定义书签。

44利用用库模块实现模块资源共享错误!未定义书签。

45易导致查询数据错误的原因错误!未定义书签。

46使用视图组织报表数据简单且易于维护错误!未定义书签。

47给报表加序号的简单办法错误!未定义书签。

48用FORMS实现ORACLE数据库与其它数据源数据的交换错误!未

定义书签。

49FORMS4.5实现的列表查询、多行录入中的实现行累计错误!未定义

书签。

50REPORT2.5中实现的动态报表(一张表利用多个QUERY语句,生

成一样格式的多张报表错误!未定义书签。

51如何屏蔽系统提示信息?错误!未定义书签。

52在编写PL/SQL代码中使用SELECT语句时如何避免例外发生?错

误!未定义书签。

53当使用主从块时,如何使从块自动提交?错误!未定义书签。

54如何减少FORM所占磁盘空间?错误!未定义书签。

55如何使定制菜单的主菜单中WINDOWS项不显示?错误!未定义书

签。

56如何使不同布局的报表显示在同一页上?错误!未定义书签。

57怎样较快的生成FMX文件?错误!未定义书签。

58如何在FORM中同时加入水平与垂直滚动条?错误!未定义书签。

59如何在告警框内显示message信息?错误!未定义书签。

60如何一次退出所有FORM?错误!未定义书签。

61如何在FORM与REPORT之间传递参数?错误!未定义书签。

62从FORM调用REPORT时,如何使REPORT以满屏方式显示?错

误!未定义书签。

63如何关闭REPORT运行时的参数窗口?错误!未定义书签。

64在Oracle中实现报表的定长输出错误!未定义书签。

65Developer/2000FROMS4.5中的"宏"代换错误!未定义书签。

66用FORMS实现ORACLE数据库与其它数据源数据的交换错误!未

定义书签。

67FORMS4.5实现的列表查询、多行录入中的实现行累计错误!未定义

书签。

68REPORT2.5中实现的动态报表(一张表利用多个QUERY语句,生

成一样格式的多张报表错误!未定义书签。

69用ORACLE*Forms和ORACLE*Graphics实现数据与图形动态显示

错误!未定义书签。

70数字分金额转成大写汉字元金额程序!错误!未定义书签。

Developer/2000中各键盘触发子所对应的“按键”

封装过程键触发子含义对应按键

ABORT_QUERYKey-EXIT[退出/取消]

BLOCK_MENUKey-MENU[块菜单]F5

CLEAR_BLOCKKey-CLRBLK[清空块]

Shift+F5

CLEAR_FORMKey-CLRFRM[清空FORM]

Shift+F7

CLEAR_RECORDKey-CLRREC[清空记录]

Shift+F4

COMMITFORMKey-COMMIT[提交/存盘]F10

COUNT_QUERYKey-CQUERY[计算查询记录总数]

Shift+F2

CREATERECORDKey-CREREC[插入新记录]

F6

DELETE__RECORDKey-DELREC[删除记录]

Shift+F6

DOWNKeyT)0WN[下滚记录]Ctrl+1、下箭头

DUPLICATE„ITEMKey-DUP-ITEM[复制域/项]F3

DUPLICATE_RECORDKey-DUPREC[复制记录]F4

EDIT_TEXTITEMKey-EDIT[打开编辑器]Ctrl+E

ENTERKey-ENTER[Enter]

ENTER_QUERYKey-ENTQRY[输入查询条件]F7

EXECUTE_QUERYKey-EXEQRY[执行查询]

F8

EXIT^FORMKey-EXIT[退出/取消查询]Ctrl+Q

HELPKey-HELP[帮助]Fl

LISTVALUESKey-LISTVAL[显示值列表LOV]

F9

LOCKRECORDKey-UPDREC[LockRecord]

NEXT_BLOCKKey-NXTBLK[下一块]

Ctrl+PageDown

NEXT_ITEMKey-NEXT-ITEM[下一域/项]

Ctrl+Tab>Tab>Enter

NEXT_KEYKey-NXTKEY[定位到下一个主键项]

Shift+F3

NEXT_RECORDKey-NXTREC[下一条记录]

Shift+Down

NEXT.SETKey-NXTSET[下一个记录集]Ctrl+>

PREVIOUS_BLOCKKey-PRVBLK[前一块]

Ctrl+PageUp

PREVIOUS_ITEMKey-PREVTTEM[前一域/项]

Shift+Tab.Shift+Ctrl+Tab

PREVIOUS_RECORDKey-PRVREC[前一条记录]

Shift+Up

PRINTKey-PRINT[打印当前屏幕]

Shift+F8

SCROLLDOWNKey-SCRDOWN[下翻屏]

PageDown

SCROLLJJPKey-SCRUP[上翻屏]PageUp

UPKey-UP[上滚记录]

Ctrl+p、上箭头

Esc取消

Backspace向后删除

Ctrl+U清除域/项

Ctrl+Fl显示有效的功能键列表

Shift+Fl发生错误时,显示错误窗口

FORM中,当光标走到块的最后一项时,如何让按“enter回车”键时,光标

自动走到下一条记录的第一项?

设置块属性

导航器风格:改变记录

如何在启动FORM程序时直接登录到Oracle数据库上?

1、调入FormBuilder,打开一个新的FORM

2、在表格级新建一个ON_LOGON触发器

3、在ON_LOGON里输入以下代码:

DECLARE

PASS1VARCHAR2(80);—PASS1为密码参数

BEGIN

LOGONCUSERI','USERI'||'@'|I'TNSl');

SELECTPASSINTOPASS1FROMT_PASSWORDWHEREUSERNAME='USER2';

LOGOUT;

LOGON。USER2',PASS11|'@'||'TNS1');

END;

FORM中,如何通过ODBC访问Acress数据?

1.在控制面板中选取ODBC控制源

2.系统DSN

3.添加(D)...

选定您需要的驱动程序来安装数据源(S):MicrosoftAcress

Driver(*.mdb)

5.完成(F)

DateSourceName:aaa(aaa就是数据源名称,也就是在应用

程序中所要使用的)

7.选择一个mdb数据库文件(select)

8.高级属性:设置用户名、口令

9.0K

10.打开一个FORM

11.文件⑹一>连接(E)

用户名/口令@odbc:aaa

13.连接(0)

从FORM中调用REPORT时,如何使打印结果直接输出到打印机上?

在parameterlist中力口入parameter_form=No

Add_parameter(list_id,'PSRAMETER_FORM',TEXT_PARAMETER,'NO');

FORM调用REPORT时,如何去掉reportserver?

Add_parameter(list_id,,ORACLE_SHUTDOWN',TEXT_PARAMETER,'YE

S');

FORM中,如何实现屏幕同步刷新?

现象说明:

FORM中,在做一连串大的操作时,有时希望用message来显示提示信息,

但屏幕却不刷新,

解决方法:

message('信息1');

synchronize;(同步屏幕显示)

message('信息2');

synchronize;

在Developer/2000中如何读写文本型操作系统文件?

PL/SQL3.3以上的版本中,UTJFILE包允许用户通过PL/SQL读写操作系

统文件。如下:

declare

file_handleutl_file.file_type;

begin

file.handle-utLfile.fopenCCA','TEST.TXT','A');-TEST.TXT是文件

utl_file.put」ine(file_handle;写入的信息');

utl_file.fclose(file_handle);

end;

Developer/2000中,可以用Text」。读写操作系统文件。如下:

DECALRE

in_fileText_IO.File_Type;

out_fileText_IO.File_Type;

BEGIN

in_file:=Text_IO.FopenC文件名;R);

Text_IO.Get_Line(in_file,linebuf);

Text_IO.Fclose(in_file);

out_file:=Text_IO.FopenC文件名」W);

Text」O.Put_Line(out_file,'写入信息');

Text_IO.Fclose(out_file);

END;

--常用TEXT_IO

Declare

out_filetext_io.file_type;--定义

Begin

out_file:=text_io.fopen('pm','w');--打开文件pm

text_io.new_line(out_file,'');--新建一彳亍

text_io.put」ine(out_file,'写入一行

text_io.fclose(out_file);--关闭文件

End;

文本输入输出

TEXTJO

TEXTJO.PACKAGE

TEXTJO.FCLOSE

TEXT_IO.FILE_TYPE

TEXTJO.FOPEN

TEXT_IO.IS_OPEN

TEXT_IO.GET_LINE

TEXT_IO.NEW_LINE

TEXTJO.PUT

TEXTJO.PUTF

TEXTJO.PUT_LINE

Declare

Out_fileText_io.file_type;

LVarchar2(100);

LIVarchar2(100);

L2Varchar2(100);

Begin

Out_file:=text_io.fopen('c:\ll\login.txt','r');

Iftext_io.is_open(Out_file)then

text_io.get」ine(Out_file,L);

text_io.get_line(Out_file,L1);

text_io.get_line(Out_file,L2);

Else

Null;

Endif;

End;

如何改变FORM(FMX模块)运行时的title?

Developer/2000中FMX默认title为:Developer/2000Forms

RuntimeforWindows95/NT

在Form级触发器中添加触发WIIEN-NEW-FORM-INSTANCE

3、在此触发器中写如下代码:

SET_WINDOW_PROPERTY(FORMS^MDI_WINDOW,TITLE,'您的提示');

FORM中,如何修改系统提示信息(默认英文)为中文?

1、调入FormBuilder,打开一个新的FORM

2、在表格级新建一个ON_ERROR触发器

3、在ON_ERROR里输入以下代码:

begin

if

error_code=40100thenmessage已在第一条记录!');

elsiferror_code=40102thenmessage('您已在最后一条记录,请先

输入处理此记录,然后再输入下一条记录!’);

elsiferror_code=40200thenmessage('此项仅用于查询参考,您无

法更改此项!');

elsiferror_code=40202thenmessage('此项必须输入!产生错误原

因:您未输入值,或您删去了原有值!’);

elsiferror_code=40203thenmessage('值必须输入完全!产生错误

原因:该项有定长要求!’);

elsiferror_code=40207thenmessage('您输入的值不在有效范围之

内,请输入有效范围之内的值!’);

elsiferror_code=40401thenmessage('您没有修改或输入任何新的

记录,无须保存!’);

elsiferror_code=40508thenmessage('编码不能相同,不能有相同编

码的记录,编码必须唯一!’);

elsiferror_code=40509thenmessage('严重操作错误!,您可能输入

了一个空的记录,无法保存记录!’);

elsiferror_code=41802thenmessage('您只能在输入新的记录时使

用[复制记录]键,来复制上一条记录!’);

else

message(error_typeI|?IIto_char(error_code)||):J||error_text);

endif;

raiseformtriggerfailure;

end;

FORM中,怎样创建动态下拉列表List?

1、打开FormBuilder

2、文件(F)一新建(N)一表格(F)

3、新建一个非数据块,取名为tool

4、鼠标右键一布局编辑器(E)

5、建一个列表项,名为xl(属于tool块)

6、新建一过程,内写如下的代码

PROCEDUREcreate_xlIS

-动态显示学历过程

CURSORAISSELECTDISTINCT(xl)FROMt_xl;

-建立a游标,从学历档案表取原始数据(有可能动态变化)

CNTNUMBER;

-记录总数变量,用于生成列表的总项数

iNUMBER;

-循环变量

TNAMEt_%TYPE;

-TNAME变量和t_xl表中name项具有相同的结构

BEGIN

CLEAR_LIST('tool.xr);-

清空列表tool.xl(tool块上的xl项)

SELECTCOUNT(DISTINCT(name))INTOCNTFROMt_xl;

-计算列表总数

OPENA;

-打开游标

FORiIN1..CNTLOOP

-开始循环

FETCHAINTOTNAME;

-取数

EXITWHENA%NOTFOUND;

-退出条件

ADD_LIST_ELEMENT('tool.xl',i,TNAME,TNAME);

-把查询出的值加入列表中(序号,实际值,显示值)

ENDLOOP;

-结束循环

CLOSEA;

-关闭游标

END;

7、在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE

在此触发器中写如下代码:create_xl;

使FORM程序一启动,就调用此过程,达到动态生成下拉列表List

的效果。

附:

-学历档案表

createtablet_xl(namevarchar2(6));

insertintot_xlvalues('小学');

insertintot_xlvalues(初中);

insertintot_xlvalues('职高');

insertintot_xlvalues(技校

insertintot_xlvalues(高中)

insertintot_xlvalues('中专');

insertintot_xlvalues('大专');

insertintot_xlvalues('本科');

insertintot_xlvalues('研究生');

commit;

FORM中,如何引入图像,制作封面?

1、打开FormBuilder

2、文件(F)-新建(N)一表格(F)

3、鼠标右键一布局编辑器(E)

4、文件⑹一导入⑴一图象(I)

5、可调入作好的图像,以制作封面。

所支持的图像格式有:TIF、JPG、BMP、TGA、PCX、PCT、GIF、CAL、RAS、

OIF、PCD等

运行FORM时,如何使按钮变灰(即无效)?

set_item_property('按钮名称:ENABLED,PROPERTY_FALSE);

FORM中,设置应用特性(光标类型)

在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE

SET_APPLICATION_PROPERTY(CURSOR_STYLE,'CROSSHAIR"'BUSY'rHELP

'|'DEFAULT,|JINSERTION*);

运行FORM时,如何使窗口(runtime窗口、画布窗口)自动变成最大化、最

小化?

在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE

2.在此触发器中写如下代码:

SET_WINDOW_PROPERTY(FORMS^MDI_WINDOW,WINDOW_STATE,MAXIMIZE);

一最大化

SET_WINDOW_PROPERTY(FORMSMDI_WINDOW,WINDOW._STATE,MINIMIZE);

一最小化

FORM中,WINDOW标题的设置

在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE

SET_WINDOW_PROPERTY(FORMS_MDIWINDOW,title,'你要写的标题');

或用以下方法

2.对象导航器-*窗口-WINDOW。(窗口的名字)->属性一标题一修改其属

FORM中,Exception(例外)都有哪些,如何书写?

BEGIN

《PL/SQL块》;

Exception

whenno_data_foundthen--没有找到数据

《响应命令》;

whentoo_many_rowsthen--返回多行,隐式光标每次只能检索一行

数据

《响应命令》;

wheninvalid_numberthen--字符向数字转换失败

《响应命令》;

whenzero_dividethen--被零除

《响应命令》;

whendup_val_on_indexthen--向唯一索引中插入重复数据

《响应命令》;

wheninvalid_cursorthen--非法游标操作

《响应命令》;

whenvalue_errorthen--数字的,数据转换,截字符串或强制性的

错误

《响应命令》;

whenothersthen--发生其它任何错误

null;-选择一:什么也不做,就当错误没发生

raiseform_trigger_failure;--选择二:挂起当前程序

END;

如何在FORM运行中,使定制菜单中的“窗口0V)”菜单项不显示?

对象导航器一窗口一WINDOW。(窗口的名字)一属性一模式修改其属性

设置窗口属性:模式=是

FORM中,如何屏蔽默认的功能键?

1.在Form级触发器中添加触发KEY-OTHERS

2.在此触发器中写如下代码:

null;

3.这样FORM程序运行后,大部分的功能键都被屏蔽(包括一些必需

键,如:上箭头、下箭头、退出…),

要想让这些键再恢复功能,就为这些键各自编程:

按键触发器代码

说明

上箭头KEY-DOWNDOWN;

上滚记录

下箭兴KEY-UPUP;

下滚记录

PageUpKEY-SCRUPSCROLL_UP;

上翻屏

PageDownKEY-SCRDOWN

SCROLL_DOWN;下翻屏

FlKEY-HELPHELP;

显不帮助

F3KEY-DUP-ITEM

DUPLICATEJTEM;复制项

F4KEY-DUPREC

DUPLICATE_RECORD;复制记录

F5KEY-MENU

BLOCK_MENU;块导航菜单

F6KEY-CREREC

CREATE_RECORD;插入记录

F7KEY-ENTQRY

ENTER_QUERY;输入查询条件

F8KEY-EXEQRY

EXECUTE_QUERY;运行查询

F9KEY-LISTVALLIST_VALUES;

显示LOV

F10KEY-COMMITCOMMIT;

Enter>TabKEY-NEXT-ITEMNEXTJTEM;

下一项

SHIFT+TABKEY-PREV-ITEM

PREVIOUSJTEM;前一项

Ctrl+QKEY-EXITEXIT_FORM;

退出/取消查询

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

1、退出FORM

exit_form;

2、取消查询

if:System.Mode='ENTER-QUERY'then

exit_form;

endif;

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

1、SQL*Plus中

SQL>createtablet_photol(photo1longraw);

SQL>createtablet_photo2(photo2longraw);

2、硬盘上c:\下有一个图象文件tmp.bmp

3、打开FORM

新建两个块:t_photol、t_photo2

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

t_photo2块也是数据库块,连接的表是数据库中的另一个表t_photo2

(备份表)

t_photol块上新建一个图象项,名为photoL对应的是即表t_photol

中的photo1列

t_photo2块上也新建一个图象项,名为photo2,对应的是即表t_photo2

中的photo2列

新建一按钮1,输入以下程序,这个按钮实现读入图象到表里,即录入

图象到表里

BEGIN

GO_BLOCK('t_photol');-到块1

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

--读入外部图象文件tmp.bmp(图象类型为BMP)到t_photol块的

photol项,也就是到了t_photol表里

COMMIT;—存盘

END;

新建一按钮2,输入以下程序,这个按钮实现图象的倒表(jphotol

到t_photo2)

BEGIN

GO_BLOCKCt_photol);--至I」块1

execute_query;

--查询出表中的图象,这时,表中的图象到了FORM中的图象项上

WRITE_IMAGE_FILE('c:\tmp.bmp','bmp','t_photol.photo1');

--把图象项中图象写入外部图象文件tmp上mp

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_photol

块photo项1)

t_photo2.photo2是备份图片表中的图象项(数据库项)(t_photo2

块photo项2)

FORM中如何存取声音?

1、硬盘上c:\下有一个声音文件tmp.wav

2、打开FORM

新建一个块:t_sound

t_sound块上新建一个声音项,名为sound1

新建一按钮1,输入以下程序

BEGIN

GOJTEM('soundr);

READ_SOUND_FILECci\tmp.wav','wave','soundl');

PLAY_SOUND('sound1');

END;

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

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

一页?

1.在Form级触发器中添加触发WHEN-TABCHANGED

2.在此触发器中写如下代码:

DECLARE

canvasjdVARCHAR2(30);一标签页ID

BEGIN

canvasjd:=GET_CANVAS_PROPERTY('楙签画布名

topmost_tab_page);

IFcanvas_id='标签页1'thengo_block('块l');endif;

IFcanvas_id='标签页2'thengo_block('块2');endif;

IFcanvas_id='标签页3'thengo_block('块3');endif;

execute_query;

END;

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

CTRL+S保存

CTRL+T编译文件

CTRL+R运行FORM

CTRL+J连接

F1调用帮助

F2布局编辑器

F4属性选项板

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

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

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

为什么我的FMX程序里没有Messageline?

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

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

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

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

怎样在form中使用宏?

在早期FOXPRO数据库编程中,经常用到宏代换功能,

但在FORMS中却没有此功能,象等在编程中经常用

到的,在FORMS中只得一行一行代码的写,但后来发现

FORMS中也有类似功能,用NAME_IN()、COPY()可以实现类似

的功能。Name_in()用于取出参数名代表的对象了数值,而

COPY()把一个参数值传递给另一参数值表示的对象。的

如下例:

FORM结构:

块B

项LI,L2,L3,L4,L5,L6

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

DELCATE

strltemNamevarchar2(20);

BEGIN

forIin1...6loop

strltemName:-:b.l"||to_char(i);

copy(null,strItemNmae);

endloop;

END;

对于NAME」N的应用可能更多一些,笔者在做社保软

件时,作保险缴费录入时曾用它少写了许多代码。当然

代码的减少就义意味维护工作量的减少

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(个人缴费)

三个块的结构相同,只是块名称不同,缴费时时行

的操作也一样,实缴名项不能大于应缴,不用NAMEJN时,

只能写三段程序,但用了NAMEJN后只用一段写一个函数

数就能达到目的。如下:

FUNCTIONFUN_JF(PRE_BLOCK_NAME

INVARCHAR)RETURNBOOLEANIS

BEGIN

ifname_in(pre_block_name||'sj.dwjtc')

>name_in(pre_block_nameH'yj.dwjtc')or

name_in(pre_b]ock_nameH'sj.dwjzh')

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

name_in(pre_block_name||'sj.gijf)

>name_in(pre_block_name||'yj.gijf)then

message(,实缴大于应缴,

returnfalse;

endif;

returntrue;

END;

从上面的两个例子来看NAME」N和COPY的应用能起

到其它编程语言的"宏”代换功能,代码的优化方面确实

能起不少的作用,减少了程序源代码的维护工作。

Oracle中Forms与Reports的集成

Oracle产品Developer2000中包括多种开发工具,其中在具体工作时用得最

多的是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()o目前,很多程序开发人员在Forms模块中调用Reports

模块时,或者没有采用这一例程,或者虽然采用这一例程但并没有充分利用参

数表来传递表单中现成的数据,或者只是利用参数表来传递少量的文本参数(非

结构化数据)作为R叩orts中的查询条件,报表的数据仍然要从数据库中查询得

到,这样既增加了数据库服务器的负载,又增加了网络的流量,而且报表生成的

速度慢,丧失了数据的实时性与一致性。因此,深入了解并熟练掌握参数表的使

用方法便显得非常重要。

在使用RUN_PRODUCT()之前要先建立参数表,并向参数表中添加参数。

RUN_PRODUCT()的使用格式如下:

RUN_PROCDUT(REPORTS,6report_name',SYNCHRONOUS,RUNTIME,

FILESYSTEM,pl_id,NULL);

其中各参数含义如下:

•REPORTS:说明被调模块是报表模块;

•report_name:被调模块的完整路径名;

•SYNCHRONOUS:说明被调模块以同步的通信方式运行(被调模块退出

之后主调模块才能继续执行,否贝IJ为ASYNCHRONOUS,即异步方式);

•RUNTIME:说明被调模块的执行方式为前台方式(否则为BATCH,即后

台方式);

•FILESYSTEM::说明被调模块的存储假置是文件系统(否则为

DATABASE,即数据库系统);

•pl_id:用户定义的参数表标识符。

使用参数表的要领

由Forms模块向Reports模块传递的数据可分为两类:一类是非结构化数据,

即报表表头(表尾)的数据;另一类是结构化数据,即报表表目的二维数据。

在如图1所示的报表中,学年、学期、班级编号、班级名称、专业名称、课程编

号、课程名称、学分、班级人数等,属于表头数据;而学号、姓名、性别、修读

性质、平时成绩、考试成绩、总评成绩、任课教师等属于表目数据。

图1Reports模块执行情况

参数表中的参数有两种,文本参数(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)等。

,廿Qi-Q”・g/・:A'KT~I)•七"答号:k)ROQ

(3砒⑷etttB*6字及9<21如■Q,fqp」gjX]

森•程

1一来级AM

1二J会C学岐1”|3

平惧息用牝小修填备♦

人学力大01

t9・名tf>AHAMAMAM仕我月号th

■遢人掌2dtoo6169:JI|2・5・二J|o®仪

卜■Q人隼jJW6771zJI|£*二|初3二1口1

|Mo)mo)1,■由入*二J957680二jii金・钊,jj|M簿那fit

»MOI99104|H«1■Q入华二J80T475引|ze二二J|”比e

J|CM01W:05同甫

卜曹Q入*二J92S486|Z«初修jJ|35

|0401952C6jlUrjji

h■国人今9”SO引「Jvm讪

枚・4人・二|187983\zn二JM・Jd|w

j川19910s

h■出人堂二]927478二JI,J初修zJ|H

|U4O199:C9|±ff)■Q人导二J81276jjlIJ&«jjln比今

■又,b

jwoiwnojh・I9078tojJI|U»jdvJKjj|n就做

<<I<>1>>I查询|就除I增加I少队收及|处豪I

>tBio":^|

■利I9(eMlAa。1网210文-耐丽力ifSj

图2Forms模块运行情况

程序实现的步骤如下:

在Sqlplus下创建一个与图1所示的表目一致的表(或视图)REPT_001当

做Reports模块的查询对象Q_001的虚拟数据源:

CREATETABLEREPT_001(/*期末成绩表文/

XHVARCHAR2(9),/*学号*/

XMVARCHAR2(10),/*姓名*/

XBVARCHAR2Q),/*,性另U*/

XDXZVARCHAR2(4),/*修读性质文/

PSCJNUMBER,/*平时成绩*/

KSCJNUMBER,/*考试成绩*/

ZPCJNUMBER,/*总评成绩*/

RKJSVARCHAR2(10)/*任课教师*/);

注意:该表仅供Reports定义查询对象Q_001之用(仅援引其列名与类型),

与整个应用系统的数据库结构无关,不需要向该表插入任何数据(保持该表为

空表),不存在数据的完整性和一致性的问题。

在Reports中定义报表模块,源模块的名称为REP_001.rdfo在该模块中,定

义与表目数据相关的查询对象Q_001:

SELECTXH,XM,XB,XDXZ,PSCJ,KSCJ,ZPCJ,RKJSFROMREPT_001;

再定义与表头数据相关的用户参数:

P_XN1/*学年学期*/

P_XN2

P_XQ

P_BJBH/*班级编号*/

P.BJMC/*班级名称*/

P_ZYMC/*专业名称*/

P_KCBH/*课程编号*/

P_KCMC/*课程名称*/

P_XF/*学分*/

P_BJRS/*班级人数*/

在Reports的布局编辑器中调整美化报表的输出格式,最后生成目标模块

REP_001.repo

在Forms模块中定义〈报表〉按钮以实现对Reports模块REP_001.rep的调

用。

为〈报表〉按钮定义WHENBUTTONPRESSED触发子:

DECLARE

PLJDPARAMLIST;

RGJDRECORDGROUP;

GC_XHGROUPCOLUMN;

GC_XMGROUPCOLUMN;

BEGIN

/*定义用来捆绑表目数据的记录组G_001*/

RG_ID:=FIND_GROUPCG_001?);

IFID_NULL(RG_ID)THEN

RGJD:=CREATE_GROUPCG_OOr);

/*定义记录组内各列,注意各列的列名、类型、顺序均要和Reports模块所

定义的查询对象Q_001中的各列相一致*/

,

GC_XH:=ADD_GROUP_COLUMN(RG=ID/XH,CHAR_COLUMN);

GC_XM:=ADD_GROUP_COLUMN(RG_ID,'XM',CHAR_COLUMN);

ELSE

DELETE_GROUP_ROW(RG」D,ALL_ROWS);

GC_XH:=FIND_COLUMN(RGJD/XH,,

CHAR_COLUMN);

4,

GC_XM:=FIND_COLUMN(RG=ID,XM,

CHAR_COLUMN);

ENDIF;

/*把Forms模块中的数据传送到记录组中*/

GO_BLOCK(tCJZB,);

FIRST_RECORD;

ROW_NUM:=1;

FORLOOP

ADD_GROUP_ROW(RG」D,END_OF_GROUP);

SET_GROUP_CHAR_CELL(GC_XH,ROW_NUM,:CJZB.XH);

SET_GROUP_CHAR_CELL(GC_XM,ROW_NUM,:CJZB.XM);

EXITWHEN:SYSTEM.LAST_RECORD="TRUE,;

LOW_NUM-LOW_NUM+1;

NEXT_RECORD;

ENDLOOP;

/*建立参数表*/

PL_ID:=GET_PARAMETER_LISTCCJ_LIST,);

IFNOTID_NULL(PL_ID)THEN

DESTROY_PARAMETER_LISTCCJ_LIST);

ENDIF;

PL_ID:=CREATE_PARAMETER_LISTCCJ_LIST,);

/*通过向参数表中加入文本参数的方式传送表头数据。其中,第1个参

数是参数表标识符,第2个参数是键(参数名),应与Reports模块中定义的用

户参数同名,第3个参数指定参数的种类是文本参数,第4个参数引用Forms模

块的数据项*/

ADD_PARAMETER(PL_ID,TXNV,

TEXT_PARAMETER,:START.XN1);

ADD_PARAMETER(PL」D,'PXN2’,

TEXT_PARAMETER,:START.XN2);

/*向参数表传送表目数据。其中,第1个参数是参数表标识符,第2个

参数是键(参数名),应与Reports模块中定义的查询对象同名,第3个参数指

定参数的种类是数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论