1.form一些报错及解决方法
1.1 提示表和视图不存在
解决方案:
a.检查是否有权限对表有操作权限。如果没有的话进行赋权,例如:grant all on csf.cr_letter_config_BAK to csf;
b.在数据源和存储过程里面的表钱加上前缀.例如:csf.cr_letter_config。
c.建form相关库表和编译form要与uat系统相同的账号,不同账号权限会不同。在编译脚本可以看到用的是哪个账号 ,如果不是要在uat相同的账号下建表,用相同的账号环境,比如说我在mbsadm账号下建的表,而uat用的是csf账号,mbsadm权限比csf大,在csf查询不到mbsadm建的表,就会报错,这时要把mbsadm的表干掉,登录csf账号建,用csf账号下的表。
1.2.不能再此创建记录
a.权限
b.检查表的字段类型和form的数据类型是否是相同的,比如说写vachar类型的就不能插在nunber类型里面。
1.3.表中已有记录
a.form模板中有toobar工具条,里面包含存储,查询,删除,更新,清空记录,上一条记录,下一条记录,帮助等按钮功能,已经封装好。不需要重复写相同功能
比如你再写一个保存功能,跟自带的commit form重复了,等于保存了两次。
2.新form权限配置
如果需求是完全新增的一个from,你可以参考一个form作为模板进行开发,可以删除form其他的内容,但是不能一些附加库和toobar是不能删除的。 除此之外你还要对改form进行权限配置,否则无法增删改查,无法访问form等权限全局触发器有WHEN-NEW-FORM-INSTANCE触发器,里面有个INIT_FORM的函数,用的是附加库中自带的方法,在forms是打不开的,可以把库从snv代码拷贝出来用工具打开,分析。
配置权限的代码如下:
pkg_access_right > ,
select a.ar_id, a.access_right_code, b.ins,b.upd,b.del from app_user_profile c,--用户信息 app_user_detail d,--用户详情表 app_user_group_access b,--用户组 app_access_right a--模块信息 where c.user_name = 'P2561' and c.up_id = d.up_id and d.ug_id = b.ug_id and b.ar_id = a.ar_id and d.system_code = 'CSF' and a.access_right_code in ('CRS9034','CRS9035') and a.system_code = 'CSF'; forms信息控制表(描述)csf_program_info表
说明:app_user_profile 用户表不能随便修改,否则可能会造成账号无法登陆等情况,会被user投诉,你可以进行反推,配置你的数据。
3.为新form新增菜单
新form对应的入口有对应的菜单,菜单文件为mmb文件,先找你新增的form属性哪个系统,在改系统下找到对应的mmb文件,用oracle forms builder工具打开,新增菜单,编译生成mmx文件,编译方法和编译form的方法是一样的。 注意要为新form配置好权限,否则是灰色禁用的。
4.在数据库中为新froms配置,打开uat没改变
数据库是否有commit,重新登录uat
5.代码规范
PROCEDURE Insert_row_prog IS CURSOR C IS SELECT PROG_ID FROM csf.cr_letter_config WHERE PROG_ID = :CR_LETTER_CONFIG.PROG_ID; V_ROWID VARCHAR2(200) := NULL; BEGIN GET_SEQ_ID; insert into csf.cr_letter_config (REPORT_NAME, PROG_NAME, THE_SCHEDULE_TIME, THE_PUBLIC_FOLDER_NAME, BINDING_AND_EFFECTIVE_DATE, AUTOEXT, TICKLER_CODE, TICKLER_CONTENT, TICKLER_SHORT_DESCRIPTION, TICKLER_LONG_DESCRIPTION, ENT_USER, ENT_ID, END_DATE, ENT_IMPORT, CONTRACT_PERIOD, PROG_ID ) values (:cr_letter_config.report_name, :cr_letter_config.prog_name, :cr_letter_config.the_schedule_time, :cr_letter_config.the_public_folder_name, :cr_letter_config.binding_and_effective_date, :cr_letter_config.autoext, :cr_letter_config.tickler_code, :cr_letter_config.tickler_content, :cr_letter_config.tickler_short_description, :cr_letter_config.tickler_long_description, :cr_letter_config.ent_user, :cr_letter_config.ent_id, :cr_letter_config.ent_date, :cr_letter_config.ent_import, :cr_letter_config.contract_period, :cr_letter_config.prog_id ); OPEN C; fetch C into :CR_LETTER_CONFIG.PROG_ID; if (C%NOTFOUND) then close C; raise no_data_found; end if; CLOSE C; show_msg('E','end insert_row_prg'); END Insert_row_pro