各位,我不想用TADOStoredProc控件,希望可以用ADOQuery执行带有输出参数的Oracle存储过程.
也查看了相关的帖子,可是按照帖子上面的做法,总是出问题,比如说: Oracle的过程名字为Proc_Test,输入参数为param1 Varchar2(20),输出参数为param2 Varchar2(20)。
我是这样调用的,
with qrySetInResult do
begin
Close;
SQL.Text := 'EXEC Proc_Test param1,:param2 output';
ExecSQL;//用Open也试过了
showmessage(Trim(Parameters.ParamByName('param2').Value));
end;
调试的时候,总是提示:‘不正常的定义参数对象.提供了不一致或是不完整的信息.’.
我的感觉,通过TADOStoredProc用'EXEC Proc_Test param1,:param2 output'这种方式调用带输出参数的过程,好像当数据库是SQLSERVER时可以,但是并不适合Oracle. 希望各位高手能够给予指点。再说明一下:不使用TADOStoredProc控件,用ADOQuery执行带有输出参数的Oracle存储过程,先谢过了大家了。
也查看了相关的帖子,可是按照帖子上面的做法,总是出问题,比如说: Oracle的过程名字为Proc_Test,输入参数为param1 Varchar2(20),输出参数为param2 Varchar2(20)。
我是这样调用的,
with qrySetInResult do
begin
Close;
SQL.Text := 'EXEC Proc_Test param1,:param2 output';
ExecSQL;//用Open也试过了
showmessage(Trim(Parameters.ParamByName('param2').Value));
end;
调试的时候,总是提示:‘不正常的定义参数对象.提供了不一致或是不完整的信息.’.
我的感觉,通过TADOStoredProc用'EXEC Proc_Test param1,:param2 output'这种方式调用带输出参数的过程,好像当数据库是SQLSERVER时可以,但是并不适合Oracle. 希望各位高手能够给予指点。再说明一下:不使用TADOStoredProc控件,用ADOQuery执行带有输出参数的Oracle存储过程,先谢过了大家了。
解决方案 »
- delphi和c#
- 用delphi通过wsdl调用webservice问题,急!!!
- 各位大虾,前些天找了家公司在深圳,做DELPHI开发,过年后过去,公司要我好好深入一下动态联接库,
- 用PCHAR获取单个字符的问题,简单,轻松得分 200412
- 【本公司因业务需要,现紧急招聘delphi程序员】
- delphi7的code_complete用不了了,请帮忙
- 未知的东西确实太多了!!
- 难道csdn就真找不到作office automation的delphi高手?太奇怪了,中国程序员没人懂这个?
- 问个简单的问题,如果x:integer;怎样表示if x='',还有就是怎样样表达x不等于数字时执行;(谢谢!,急)
- 关于INDY,FTP数据上传的问题
- API控制WORD的菜单
- DBGrideh选取问题
with qrySetInResult do
begin
Close;
SQL.Text := 'Proc_Test';
//添加2个(TParameter)
//第2个(TParameter)的Direction属性设置为pdOutput 才行
ExecSQL;//用Open也试过了
showmessage(Trim(Parameters.ParamByName('param2').Value));
end;
访问Oracle还是用BDE比ADO好些,当然最好是用ODAC了.....
======================================================================================
我也说明一下:使用TADOStoredProc控件、就可得到Oracle存储过程的输出参数 //-- 在執行前、先加参数定義
ADOStoredProc1.Parameters.Clear; //清空参数列表
with ADOStoredProc1.Parameters.AddParameter do //追加入参数
begin
Name := 'param1';
DataType := ftString;
Direction := pdInput; //in
Size := 20;
end;
with ADOStoredProc1.Parameters.AddParameter do //追加出参数
begin
Name := 'param2';
DataType := ftString;
Direction := pdOutput; //out
Size := 20;
end; with ADOStoredProc1 do
begin
Prepared := True;
Parameters.ParamByName('param1').Value := 'a'; //入参
ExecProc; //執行
ShowMessage(Parameters.ParamByName('param2').Value); //出参
end;
只是现在不想用它,想用ADOQuery,大家可能认为我不知道TADOStoredProc的用法,这一点大家就误会了。