各位,我不想用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存储过程,先谢过了大家了。

解决方案 »

  1.   

    语句错了。
        with qrySetInResult do
        begin
          Close;
          SQL.Text := 'Proc_Test';
          //添加2个(TParameter)
          //第2个(TParameter)的Direction属性设置为pdOutput 才行
          ExecSQL;//用Open也试过了
          showmessage(Trim(Parameters.ParamByName('param2').Value));
        end;
      

  2.   

    ljyt(罗云) ,试过了,不行的
      

  3.   

    沒做過這樣的,用TADOStoredProc很好的呀。
      

  4.   

    本来用ADO来访问Oracle就会出现一些怪怪的问题的.....
    访问Oracle还是用BDE比ADO好些,当然最好是用ODAC了.....
      

  5.   

    再说明一下:不使用TADOStoredProc控件,用ADOQuery执行带有输出参数的Oracle存储过程
    ======================================================================================
    我也说明一下:使用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;
      

  6.   

    ailibuli(愛理不理) ,我知道TADOStoredProc控件该如何使用,以前也一直用TADOStoredProc调用存储过程,无论是有输出参数的,还是没有输出参数的,都是没问题的。
      只是现在不想用它,想用ADOQuery,大家可能认为我不知道TADOStoredProc的用法,这一点大家就误会了。
      

  7.   

    人有多大胆、地有多大産。hehe君自己慢慢試試看、有了結果告俺一声、俺給君分分...