第一步 当然是建表了
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 ISBEGIN
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;
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 ISBEGIN
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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货