//以下这样写,执行正常   其中Param2和Param3的参数数据类型不一致
with ADOStoredProc1, ADOStoredProc1.Parameters do
begin
  ParamByName('Param1').Value := Value1;
  ParamByName('Param2').Value := Value2;
  ParamByName('Param3').Value := Value3;
  execproc;
end;//以下这样写,执行出现错误:提示参数值或类型错误
with ADOStoredProc1, ADOStoredProc1.Parameters do
begin
  ParamByName('Param1').Value := Value1;
  ParamByName('Param3').Value := Value3;
  ParamByName('Param2').Value := Value2;
  execproc;
end;

解决方案 »

  1.   

    其实你不必一定使用存储过程的组件,你可以使用一般的command组件,
    将存储过程作为一般的sql语句执行即可,只需构造好这个存储过程的sql。
      

  2.   

    我可以给你Delphi开发Oracle的专用包doa ,用这个比较好,至少ADO不能调用Oracle的包。
    另外我用doa时,调用过程或函数写参数时有两种方式,一种就是按照参数的顺序,另一种可以按照参数的名称,你可以试试ADO能否按参数名称来传递值。
    MSN:[email protected]
      

  3.   

    谢谢,发我邮箱里:[email protected]
      

  4.   

    ParamByName('Param1').Value := Value1;
      ParamByName('Param3').Value := Value3;
      ParamByName('Param2').Value := Value2;过程的参数类型是什么?都是VARCHAR2吗?
    这个是包你传递的参数类型不对,如数值型的你传进了字符型,
    你转化一下不就可以了?