用ADOConnection连接数据库调用执行存储过程,如果conntectionString使用'Provider=MSDAORA.1'即微软的oracle的ado驱动,一切正常;
但使用'Provider=OraOLEDB.Oracle.1'这个Oracle的驱动,就报错了,程序代码如下:with ADOStoredProc1 do
      begin
        Connection := ADOConnection1;
        Close;
        Parameters.Clear;
        ProcedureName:= p_name;
        Parameters.CreateParameter('p1',ftString,pdInput,200,p_sql);
        Parameters.CreateParameter('p2',ftInteger,pdInput,10,P_size);
        Parameters.CreateParameter('p3',ftInteger,pdInput,10,p_cur);
        Parameters.CreateParameter('p4',ftInteger,pdOutput,10,0);
        Parameters.CreateParameter('p5',ftInteger,pdOutput,10,0);
        Open;
     end;在ADOStoredProc1 的open时,报错"参数类型或个数不对"我的存储过程定义是这样的:
 procedure P_QuerySplit(sqlscript  in varchar2, --表名/SQL语句 
                         pageSize   in integer, --每页记录数
                         pageIndex  in integer, --当前页
                         totalCount out number, --返回总记录数
                         totalPage  out number, --返回总页数
                         v_cur      out sys_refcursor --返回游标
                         );
怎么回事啊?

解决方案 »

  1.   

    1.ADOStoredProc1.ProcedureName在设计期设置;
    2.看看ADOStoredProc1.Parameters各个的参数和类型;
    3.我尽量避免使用.CreateParameter方法!
    试试我的方法把!
      

  2.   

    with ADOStoredProc1 do
          begin
            Connection := ADOConnection1;
            Close;
            ProcedureName:= p_name;
            Parameters.Refresh ;
            Parameters.ParamByName('p1').value :=200;
            Parameters.ParamByName('p2').value :=10;
            Parameters.ParamByName('p3').value :=10;
            Parameters.ParamByName('p4').value :=10;
            Parameters.ParamByName('p5').value :=10;
            Open;
         end;这样试试
      

  3.   

    flychenjun的方法不行,parameters是动态生成的没有create不能赋值的
      

  4.   

    with ADOStoredProc1 do
          begin
            Connection := ADOConnection1;
            Close;
            ProcedureName:= p_name;
            Parameters.Refresh ;
            Parameters.ParamByName('p1').asstring:=200;
            Parameters.ParamByName('p2').asstring:=10;
            Parameters.ParamByName('p3').asstring:=10;
            Parameters.ParamByName('p4').asstring:=10;
            Parameters.ParamByName('p5').asstring:=10;
            Open;
         end;