我想使用oracle 10g表单在Excel文件中生成报告,并在按下按钮时实现触发器。当按下按钮时出现以下错误:
40735:当按下按钮的触发器引发未处理的异常ORA-305500
代码:
declare
application ole2.obj_type;
workbooks ole2.obj_type;
workbook ole2.obj_type;
worksheets ole2.obj_type;
worksheet ole2.obj_type;
cell ole2.obj_type;
arglist ole2.list_type;
row_num number;
col_num number;
fontObj ole2.obj_type;
cursor rec is SELECT so.descr saleorgdescr,ih.invdate invdatemaster, ih.docNUM docnum,
TO_CHAR(ih.invdate,'mon-yyyy') invmonth
FROM ARMINVHEAD ih, SDMSALEORG so
WHERE
ih.status='69'
AND TO_DATE(ih.INVDATE,'DD-MM-RRRR')
BETWEEN
TO_DATE('01-01-2008','DD-MM-RRRR')
AND
TO_DATE('01-01-2009','DD-MM-RRRR')
order by IH.INVDATE, ih.docnum;
procedure SetCellValue(rowid number,colid number,cellValue varchar) is
begin
arglist := ole2.create_arglist;
ole2.add_arg(arglist,rowid);
ole2.add_arg(arglist,colid);
cell:= ole2.get_obj_property(worksheet,'Cells',arglist);
fontObj := ole2.get_obj_property(cell,'Font');
ole2.destroy_arglist(arglist);
ole2.set_property(cell,'value',cellValue);
ole2.set_property(fontObj,'Size',16);
ole2.set_property(fontObj,'BOLD',1);
ole2.set_property(fontObj,'ColorIndex',7);
ole2.release_obj(cell);
end SetCellValue;
procedure app_init is
begin
application := ole2.create_obj('Excel.Application');
ole2.set_property(application,'Visible',true);
workbooks := ole2.get_obj_property(application,'workbooks');
workbook := ole2.Get_Obj_Property(workbooks,'add');
worksheets := ole2.get_obj_property(application,'worksheets');
worksheet := ole2.Get_Obj_Property(worksheets,'add');
ole2.set_property(worksheet,'Name','Emp Sheet');
end app_init;
procedure save_excel(path varchar,filename varchar) is
begin
OLE2.Release_Obj(worksheet);
OLE2.Release_Obj(worksheets);
-- Save the Excel file created
If path is not null then
Arglist := OLE2.Create_Arglist;
OLE2.Add_Arg(Arglist,path||'\'||file_name||'.xls');
OLE2.Invoke(workbook, 'SaveAs', Arglist);
OLE2.Destroy_Arglist(Arglist);
end if;
end save_excel;
begin
app_init;
row_num:=1;
col_num:=1;
SetCellValue(row_num,col_num,'saleorgdescr');
col_num:=col_num + 1;
SetCellValue(row_num,col_num,'invdatemaster');
col_num:=col_num + 1;
SetCellValue(row_num,col_num,'docnum');
col_num:=col_num + 1;
SetCellValue(row_num,col_num,'invmonth');
for i in rec loop
row_num:=row_num + 1;
col_num:=1;
SetCellValue(row_num,col_num,i.saleorgdescr);
col_num:=2;
SetCellValue(row_num,col_num,i.invdatemaster);
col_num:=3;
SetCellValue(row_num,col_num,i.docnum);
col_num:=4;
SetCellValue(row_num,col_num,i.invmonth);
end loop;
save_excel('C:\excel_export','emp_data');
OLE2.Release_Obj(workbook);
OLE2.Release_Obj(workbooks);
OLE2.Release_Obj(application);
end;
如何以oracle形式10g解决此问题?
我正在将Oracle Forms 10g与Oracle Apps ERP模块一起使用
答案 0 :(得分:1)
ORA-305500
是一个普通的OLE2错误,表明Forms与非Oracle资源(在本例中为Excel)之间存在一些问题。
在行应用程序处出现以下错误:= ole2.create_obj('Excel.Application');
基本问题是您正在使用使用n层体系结构的Forms 10g。与Forms 6i或更早版本的客户端服务器相比,这是一个巨大的变化。这意味着Forms OLE在本地到Forms应用程序上运行Excel之类的应用程序,即在Forms应用程序服务器而非桌面上运行。因此,除非您的Forms应用程序服务器在Windows操作系统上运行并安装了Excel,否则OLE将无法工作,即使这样,OLE仍将在服务器上生成文件。
Forms 10g随Webutils库一起提供,以在多层系统中功能上支持客户端-服务器样式。您需要使用CLIENT_OLE2()
函数来纠缠10g表单中的Excel和WebUtil_File.File_Save_Dialog()
来将文件保存到本地目录。
Webutil错误:找不到Oracle.forms.webutil.ole.OleFunctions bean
听起来像您尚未将Forms配置为正确使用Webutil(或完全不使用Webutil)。表单帮助文档中有一些内容,或者您可以关注this article (link).