第一步 当然是建表了
example : -- create table
drop table t_tname;
create table t_tname(xh number(2), -- 序号
xm varchar2(10), -- 姓名
csrq date, -- 出生日期
bz varchar2(100), -- 备注
constraint pk_t_tname primary key(xh));
下面都以表格 t_tname 为例
第二步 就是实现功能了
打开form builder 前期准备工作
首先要有一个画布、窗口(假如将其名字名为cc_main,w_main)两者必须对应,然后就是添加数据块(就是
选择你建立的表格)布局画面,按照提示一步一步完成了,最后将你需要实现什么功能添加功能按钮,放在
另外一个非数据库块
然后就是代码编写了。
1.WHEN-NEW-FORM-INSTANCE(进入FROM时执行) 所要做的就是初始化窗口和一些自己需要的查询
1.1 将初始化窗口写成一个过程
PROCEDURE Prc_Init_Windows IS
BEGIN
Set_Window_Property(Forms_Mdi_Window,TITLE, 'WINDOW_NAME '); --设置多文档窗
口标题
Set_Window_Property(Forms_Mdi_Window,WINDOW_STATE,maximize); --设置多文档窗口最
大化
Set_Window_Property( 'W_Main ',WINDOW_STATE,maximize); --设置主
窗口最大化
:System.Message_Level:= '15 ';
--设置信息提示级别
END;
然后直接调用过程在WHEN-NEW-FORM-INSTANCE触发器里
-- code
Prc_Init_Windows;
GO_BLOCK( 't_tname ');
SET_BLOCK_PROPERTY( 't_tname ',INSERT_ALLOWED,PROPERTY_false);
SET_BLOCK_PROPERTY( 't_tname ',UPDATE_ALLOWED,PROPERTY_false);
execute_query; -- 内置子程序执行查询(查询所有记录)
2.添加 (所要做的就是保证序号不能为空,关键字)
两种操作方法一种直接在界面上输入,二种弹出另外一个窗口进行操作
就讲第一种吧,定义一个form参数p_xh (在对象导航器里面定义)
declare
nXH NUMBER(2);
BEGIN
GO_BLOCK( 't_tname ');
SET_BLOCK_PROPERTY( 't_tname ',INSERT_ALLOWED,PROPERTY_TRUE);
SET_BLOCK_PROPERTY( 't_tname ',UPDATE_ALLOWED,PROPERTY_false);
last_record;
create_record;
select max(xh) into nXH from t_tname;
:parameter.p_xh := nXH;
:t_tname.xh := :parameter.p_xh;
END;
在t_tname数据块中添加WHEN-NEW-RECORD-INSTANCE触发器
if get_block_property( 't_tname ',insert_allowed) = 'true ' then
if :t_tname.xh is null then
:parameter.p_xh := :parameter.p_xh + 1;
:t_tname.xh := :parameter.p_xh;
end if;
end if;
3.修改
GO_BLOCK( 't_tname ');
IF :t_tname.XH IS NOT NULL THEN
SET_BLOCK_PROPERTY( 't_tname ',INSERT_ALLOWED,PROPERTY_FALSE);
SET_BLOCK_PROPERTY( 't_tname ',UPDATE_ALLOWED,PROPERTY_TRUE);
END IF;
4.删除
GO_BLOCK( 't_tname ');
IF :t_tname.XH IS NOT NULL THEN
SET_BLOCK_PROPERTY( 't_tname ',delete_ALLOWED,PROPERTY_true);
delete_record;
commit;
SET_BLOCK_PROPERTY( 't_tname ',delete_ALLOWED,PROPERTY_false);
END IF;
5.保存
GO_BLOCK( 't_tname ');
COMMIT;
SET_BLOCK_PROPERTY( 't_tname ',delete_ALLOWED,PROPERTY_FALSE);
SET_BLOCK_PROPERTY( 't_tname ',INSERT_ALLOWED,PROPERTY_FALSE);
SET_BLOCK_PROPERTY( 't_tname ',UPDATE_ALLOWED,PROPERTY_FALSE);
6.撤消
DECLARE
P_WHERE VARCHAR2(200);
BEGIN
GO_BLOCK( 't_tname ');
CLEAR_BLOCK(NO_COMMIT);
P_WHERE := GET_BLOCK_PROPERTY( 't_tname ',DEFAULT_WHERE);
SET_BLOCK_PROPERTY( 't_tname ',DEFAULT_WHERE,P_WHERE);
EXECUTE_QUERY;
END;
7.查询
以姓名和出生日期为字段进行查询,从新添加一个窗口和画布,一个查询非数据块(例如块名为
BLK_QUERY)
DECLPARE
P_WHERE VARCAHR2(200) := '1=1 ';
BEGIN
IF :BLK_QUERY.XM IS NOT NULL THEN
P_WHERE := P_WHERE|| ' AND XM = '||CHR(39)||:BLK_QUERY.XM||CHR(39);
END IF;
IF :BLK_QUERY.CSRY IS NOT NULL THEN
P_WHERE := P_WHERE|| ' AND TO_CHAR(CSRY, ' 'YYYYMMDD ' ') =
'||CHR(39)||TO_CHAR(:BLK_QUERY.CSRY, 'YYYYMMDD ')||CHR(39);
END IF;
GO_BLOCK( 't_tname ');
CLEAR_BLOCK(NO_VALIDATE);
SET_BLOCK_PROPERTY( 't_tname ',DEFAULT_WHERE,P_WHERE);
EXECUTE_QUERY;
END;