ODAC调用存储过程的错误 ( 积分: 200 )

  • 主题发起人 主题发起人 kunanku
  • 开始时间 开始时间
K

kunanku

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ODAC做一个调用存储过程的测试:
1.先调用DLL动态创建了一个Torasession,连接上数据库(成功)。
2.使用Torastoredproc,将Torastoredproc的session设为Torasession,然后设置存 储过程名,创建参数等,执行时报如下错误“Invalid class typecast”。
3.如果静态的使用Torasession,程序正常,不知何故?
Torastoredproc配置的代码如下:
begin
with orastoredproc1 do
begin
session:=OraSession1;
storedProcName:='scjaj.DAORU';
params.Clear;
params.CreateParam(ftstring,'usr',ptinput);
params.CreateParam(ftstring,'pass',ptinput);
params.ParamByName('usr').value:=edit1.text;
params.ParamByName('pass').value:=edit2.text;
ExecProc;
end;
end;
 
给你一个调用存储过程的例子

//插入事件处理
function InsertEveDo(eveid:string;infotime:TDateTime;receiver:string;infocontent:string;
callid:string;dutyid:string;infodept,infoway,precaseid:string;var retdoid:string; var Errinfo:string):boolean;
begin
with DM.SPCall do
begin
try
StoredProcName:='P_insertDo';
Params.Clear;
Params.CreateParam(ftString,'v_eveid',ptInput);
Params.CreateParam(ftDateTime,'v_infotime',ptInput);
Params.CreateParam(ftString,'v_receiver',ptInput);
Params.CreateParam(ftString,'v_infoContent',ptInput);
Params.CreateParam(ftString,'v_callid',ptInput);
Params.CreateParam(ftString,'v_dutyid',ptInput);
Params.CreateParam(ftString,'v_infodept',ptInput);
Params.CreateParam(ftString,'v_infoway',ptInput);
Params.CreateParam(ftString,'v_precase',ptInput);
Params.CreateParam(ftString,'o_doid',ptOutput);
//给参数赋
params.ParamByName( 'v_eveid' ).AsString := eveid;
params.ParamByName( 'v_infotime' ).AsDateTime := infotime;
params.ParamByName( 'v_receiver' ).AsString:= receiver;
params.ParamByName( 'v_infoContent' ).AsString := infocontent;
params.ParamByName( 'v_callid' ).AsString := callid;
params.ParamByName( 'v_dutyid' ).AsString := dutyid;
params.ParamByName( 'v_infodept' ).AsString := infodept;
params.ParamByName( 'v_infoway' ).AsString := infoway;
params.ParamByName( 'v_precase' ).AsString := precaseid;

ExecProc;

retdoid := Params.ParamValues['o_doid'];
if trim(retdoid) = '0' then
begin
ErrInfo:='插入处理编号已经存在,请稍后再执行';
result:=false;
end
else if trim(retdoid)='1' then
begin
ErrInfo:='操作系统或网络等未知原因使操作失败';
result:=false;
end
else begin
ErrInfo:='执行成功';
result:=true;
end;
except
end;
close;
end;
end;
 
感谢,给你加上分
 
好像还是不行......,还是那个错误
关键是这句session:=OraSession1;
Torastoredproc的session是动态指定的
 
那不懂了,其实你应该给出动态创建的代码,不过我觉得使用动态创建是又费时又费资源的做法,如果忘记释放,问题多多
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
948
import
I
后退
顶部