存储过程调用时总是出现"sqlora8.dll"错误.
测试一个简单的存储过程 ,参数直接赋值如下:就不会出错.
   with fm_dm.cx do
   begin
     close;
     sql.Clear;
     sql.Add('call aa_test ('''+trim(edit7.Text)+''')');
     execsql;
   end;如果使用参数,则会出错: 
 with fm_dm.cx do
   begin
     close;
     sql.Clear;
     sql.Add('call aa_test (:fid ) ');
     parambyname('fid').value := trim(edit7.Text);
     execsql;
   end;
说明:Delph7+oracle10g,采用BDE连接数据库,其中CX为query控件,aa_test为存储过程.aa_test没有错误.

解决方案 »

  1.   

    with fm_dm.cx do 
      begin 
        close; 
        sql.Clear; 
        sql.Add('call aa_test (' + :fid + ') '); 
        parambyname('fid').value := trim(edit7.Text); 
        execsql; 
      end; 
      

  2.   


    存储过程是没有问题的,可以单独运行的.并直接赋值调用存储过程也不会出错.上面测试用的存储过程:create or replace  PROCEDURE AA_TEST
    (
    v_fid IN NUMBER DEFAULT NULL
    )
    AS
    str varchar2(500);
    BEGIN
     
       str := ' update cggl_phsz set del=1 where fid='''||v_fid||'''';
      execute immediate str;
      commit;
    END AA_TEST;
      

  3.   


    这样肯定是不行的,语法错误.sql.Add('call aa_test (' + :fid + ') '); 
      

  4.   

    那先给:fid赋值呢,delphi具体不太懂,看你写的那两段,感觉第一个call的时候参数传的是edit7.Text的值,而第二个传的是:fid这个串