首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >40735:按下扳机时引发未处理的异常或305500

40735:按下扳机时引发未处理的异常或305500
EN

Stack Overflow用户
提问于 2018-11-19 06:26:33
回答 1查看 4.6K关注 0票数 1

我想在Excel文件中使用oracle 10g生成报表,并在按下按钮时实现触发器。当按下按钮,得到以下错误:

40735:按下扳机时引发未处理的异常或305500

代码:

代码语言:javascript
运行
复制
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;

如何解决甲骨文表格10g中的这个问题?

我使用oracle窗体10g和Oracle应用程序ERP模块。

EN

回答 1

Stack Overflow用户

发布于 2018-11-19 08:25:50

ORA-305500是一个通用的OLE2错误,表示表单和非Oracle资源之间存在一些问题,在本例中是OLE2。

在Excel.Application := ole2.create_obj(‘Excel.Application’)处引发以下错误;

最基本的问题是您使用的是表单10g,它使用的是n层体系结构。这是对表单6i或更早版本的客户端服务器的巨大更改。这意味着Forms在表单应用程序上运行类似于Excel的应用程序,即在窗体应用服务器上,而不是在桌面上。因此OLE将无法工作,除非您的窗体应用服务器在Windows操作系统上运行并安装了Excel,即使这样,它也会在服务器上生成文件。

Forms 10g附带了Webutils库,以支持多层系统中的客户端-服务器风格。您需要使用CLIENT_OLE2()函数将表单10g中的Excel和WebUtil_File.File_Save_Dialog()保存到本地目录中。

OTN论坛(链接)。上有一个很好的例子

Webutil :未找到Oracle.forms.webutil.ole.OleFunctions bean

听起来您还没有将表单配置为正确地使用Webutil (或者根本没有)。表单帮助文档中有一些内容,或者您可以跟随这篇文章(链接)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53369337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档