1前言OracleForms是OracleDeveloper中的一个主要产品,是一个在Windows环境下开发和运行的基于表格的开发工具。Forms一般翻译成“表格”,但与纸上的表格有很大的区别,纸上的表格是事先画好的、静态的,只能用一次。而Forms是动态的,不但可修改,而且可完成更多工作,如:查询、分类、统计和效验等。Forms是一个允许用户添加、修改、删除和查询数据库记录的用户界面。利用Forms可以快速开发基于表格的多种应用程序,用于表示和操纵数据库的数据。Forms已经将Oracle数据库直接与应用程序开发软件捆绑在一起,使开发变的容易、快速。Forms运行在Windows环境下,具有非常友好的图形界面,提供丰富的图形处理功能和对象编辑工具,为应用程序开发和维护提提供许多方便。Forms还可以处理照片、图像等,为应用提供更复杂界面。Forms完全使用屏幕图形窗口和工具,操作非常直接方便。2目录第一章Form基本概念1.什么是Form2.Form模块的结构3.Form模块的层次结构4.Form模块文件组成第二章Form的工作方式1.Form应用模块的生成2.运行Form模块3.Form工作模式4.查询数据5.插入、更新和删除数据6.提交和回滚事务第三章Form设计工具1.Form界面设计2.对象导航器3.布局编辑器4.属性选项板5.其他Form设计工具第四章基本Form设计1.块和项2.开发Form的一般步骤3.建立基表块4.建立主从块5.建立控制块第五章常用界面项的设计1.建立文本项2.建立复选框3.建立列表项4.建立单选组5.建立显示项36.建立图像项7.建立按钮第六章其他常用功能设计1.建立值列表(LOV)和记录组2.建立编辑器3.建立报警器第七章窗口和画布视图1.窗口和画布视图的分类2.建立窗口3.建立内容画布视图4.建立堆叠画布视图5.建立工具条画布视图6.建立标签画布视图第八章Form中的触发器1.Form中的触发器的基本概念2.Form中的触发器类型3.建立触发器4.触发器作用范围第九章触发器编程1.编写触发器2.内部子程序3.验证4.输入项触发器5.非输入项触发器6.使用变量和参数第十章定制菜单1.菜单编辑器2.建立菜单模块4第一章Form基本概念本章介绍有关Form的一些基本概念,包括以下内容:什么是Form。Form模块的结构。Form模块的层次结构。1.1什么是FormForm在英文中是“表格”之意,这里有“格式”之意,但这些表述并不准确。在本书中我们将直接使用Form。FormBuilder是OracleDeveloper/2000的主要产品,利用FormBuilder可以快速开发基于Form的多种应用程序,用于表示和操纵数据。具体地说,利用Form可以:利用各种界面项查询、插入、更新和删除数据。使用文本和图像控件显示数据。通过使用窗口和数据库事务来控制Form。直接利用OracleGraphics和OLE2(对象连接与嵌入工具)应用功能。集成菜单可以实现综合应用功能。能够直接发送数据到OracleReports。归根到底,Form应用模块提供了一个存取数据库(包括查询、插入、修改和删除数据库)的界面。Form应用模块由三类模块(文件)组成(1)Form(格式)模块:表示用户可看到并能操纵的对象和数据的格式(Form),Form中的数据项(item)可组成记录。(2)Menu(菜单)模块:包含层次菜单,用户选择单项以执行所需命令。(3)Library(库)模块:PL/SQL程序单元(programunit)的集合。其中,Form模块是基本对象,而菜单模块通常要连到Form模块,包含程序单元的库模块连到Form模块和菜单模块,才能使得所定义的菜单模块和库模块有效。开发Form应用模块一般需要三个部件:(1)设计部件(FormBuilder):是一个设计和存储Form、Menu、5Library模块的应用开发环境。在设计部件中建立的模块以二进制格式存放,也可以存在文件或数据库中,并且可以在各种平台上移植。以上三个模块的文件名的后缀分别为:.fmb、.mmb和.pll。另外,开发人员在FormBuilder中可以执行编译部件和运行部件的相应功能。而且在设计部件中还可以实现模块存取格式在二进制和文本格式之间的转换。模块的文本格式描述了模块的对象和节点,它是人工可读的文本文件,其文件名的后缀分别为.fmt、.mmt和.pld。(2)编译部件(FormCompiler):读取在设计部件产生的模块定义文件,生成可执行的运行文件。三种模块的可执行文件的文件名后缀为.fmx、.mmx和.pll。(3)运行部件(FormsRuntime):From应用模块的运行环境。主要是指用来运行由编译部件编译生成的可执行应用模块的工具。必须注意,只有Form模块可以独立运行。这里需要注意的是,二进制的模块定义文件是可以移植的,但由编译部件生成的二进制可执行文件是不可以移植的。1.2Form模块的结构Form模块是Form应用的主要组成部分,它可由许多不同类型的对象(Object)组成。我们首先阐述下面三个主要对象:(1)项(Item):用以表示数据,并根据项类型与用户交互从逻辑上组成块(Blocks),安排在可见的画布(Canvas)上。(2)块(Block):是逻辑上属于块,块中的项在逻辑上相关联,例如它们对应同一个数据库表的一行,或当用户在Form中移动时须处在同一个导航循环。需要注意的是,块中的项不需要被安排在一起,即它们分别安排在多个画布和窗口上。(3)画布(Canvas):是一个可视化的设计界面,Form模块的可见对象被安置在画布上。一个Form模块可以有好几个画布。缺省情况下,Form模块中的所有画布被放在同一个窗口内,但某一时刻时只能看到一个画布。要想同时看到多个画布,可以将画布按排在不同的窗口内。图1-1给出了项、块和画布之间的关系。Form模块是有层次结构的,在运行Form时,要想在Form应用中实现导航,可以利用Form中的项和块,而不能选用画布。块中的每个项都有顺序,而Form中的块也有相应的顺序。当用户想从块中的某一项移动到块中的下一个项时,焦点会落在下一项上,若下一项在另一个画布上,系统会自动显示这一画布。类似地,用户想移到下一块或前一块,若该块的第一个项位于另一个画布上,则该画布会自动显示出来。当然,若你已6能够看到将要移到的项,Form应用允许你直接用鼠标在其上按一下即可以实现导航,也可以在应用程序中实现导航。1.3Form模块的层次结构在Form模块中可创建多种类型的对象。图2-2是Form模块的层次结构图。下面对Form模块中的对象分别予以描述。(1)窗口(Window):窗口包含画布视图。一屏可显示几个窗口,这由屏幕大小和各窗口的位置及窗口的大小决定。(2)画布视图(Canvas_View):是一个放置可见对象的界面,所有对象都放在画布上。一个画布可包含(图文)文本和图形,但都是静态信息,用户不能与之交互。一个Form模块可有多个画布,画布上有项。(3)项(Item):项是Form中的最基本的单位,它是块的成员。项按功能可以组成记录,能显示信息并可以与用户交互数据。常用来执行对数据库的操作各维护。(4)块(Block):块是Form模块中一些界面项(如文本项、列表项等)的逻辑组合,它属于Form模块。需要注意的是,块中的项不需要从物理上存放在一起,它们可以分别安排在多个画布视图和窗口上。(5)触发器(Trigger):由一个事件可以引起其执行的PL/SQL块。触发器依据其作用范围可发为Form级触发器、块级触发器和项级触发器。(6)用户命名程序单元(User_namedprogramunit):它是用户命名的过程(procedure)、函数(Function)或包(package),它属于Form模块。(7)其他对象:包括报警器(Alert)、参数(Parameter)、记录组(RecordGroup)等。它们都属于Form模块。7第2章Form的工作方式本章介绍有关Form工作的一些基本情况,包括一下内容:如何生成Form应用模块运行一个Form模块Form工作模式通过Form查询数据库数据插入、更新和删除记录提交和回滚事务2.1Form应用模块的生成前面讲过,Form应用模块共有三类:(1)Form模块:所有对象和代码的集合,包括窗口(Window)、项(Item)、PL/SQL代码块或触发器、存储过程等。用户可用它完成数据查询、删除及修改等操作。(2)菜单模块:PL/SQL过程、子菜单和菜单项命令的集合,提供执行命令的菜单。(3)库模块:PL/SQL过程、函数、包的集合,咱应用中被其他模块调用。可以将Form、Menu、Library三个模块集成为一个完整的应用。例如你可以定义一个菜单模块并把它连到Form模块。类似地,可将库模块连接到菜单模块或库模块,这样,Form模块中的触发器和存储过程可以调用与其相连的库模块中的过程。Form应用模块也可以与OracleDeveloper的其他工具,如Reports报表和Graphics图形工具集成起来。例如设计Form中的按钮可以执行一个Reports报表输出。可见,模块化大大增强了应用设计的灵活性,提高了开发效率。2.1.1建立新的Form模块设计Form模块时可以同时打开好几个Form模块、菜单模块和库模块。当你启动够造部件时,系统自动打开一个新的Form模块,这样可以直接建立Form对象了。如果你不想在缺省Form下工作,而是想打开以存在的模块,那么系统会关闭缺省的新模块,你打开的模块会替代缺省模块。模块可以一.fmb、.mmb、.pll文件格式保存,或保存到数据库中。模8块村区设计参数决定从文件系统还是从数据库打开该模块。缺省情况下,模块存取设计的参数为文件系统,表示从文件系统打开该模块。1.建立新的Form、菜单和库模块的方法(1)在对象导航器中,定位于Form、菜单(Menu)或库(Library)节点,选择对象导航器上的“新建(Create)”工具图标可以新建Form、菜单和库模块。(2)选择“文件(File)”上的“新建(New)”菜单项,然后选择Form、菜单(Menu)、和库(Library)可以新建Form、菜单和库模块。2.打开以建立的Form、菜单和库模块(1)选择“文件(File)”上的“打开(Open)”菜单项,显示文件或数据库对话窗。(2)选择欲打开的模块。以打开的模块显示在对象导航器的相应节点(Form、Menu、Library)下。2.1.2生成Form模块运行文件在运行一个Form之前,必须根据.Fmb构造文件生成.fmx可运行文件。生成一个Form或菜单(Menu)是会编译还未编译的程序单元,产生可运行文件。当运行前编译(CompileBeforeRun)参数为ON(缺省设置)时,系统会在你执行“程序(Program)”上的“运行(Run)”命令时隐式地编译该Form,通过构造部件或命令行以可以显示编译Form。编译Form时,系统编译还未编译的PL/SQL代码,当有编译错误时会显示错误报警,表示有错误信息,并将终止编译。缺省情况下,编译部件以增量方式编译,即只是编译当前标志为未编译的PL/SQL代码,可以选择“程序(Program)”下的“编译(Compile)“下的”全部(CompiileAll)“菜单项强制进行完全编译。1.生成Form模块(1)在构造部件中显式生成Form打开Form,若打开的模块多于一个,必须标记欲编译的模块。选择“文件(File)”下的“管理(Administration)”中的“编译(Compile)”菜单项。若编译成功,状态行将显示“模块编译成功(ModuleCompiledSuccessfully)”。构造部件在缺省目录下以与Form同样的名字生成后缀为.fmx的运行文件。(2)在构造部件中运行时编译Form选择“工具(Tools)”下