开发环境d7+oracle8i,写了个过程,由输入的id查找匹配的记录,用dbexpress连接数据库并调用过程,发现第一次调用是正常无误的,在次调用时即使使用上次正确的输入参数,程序仍然报错,说是那个输入参数找不到,我又写了一个没有条件的查找过程,不管调用几次都没有错误,这是怎么回事呢?数周的问题了,不得其解。过程代码:
--返回指定日程ID的日程信息
 procedure getschedulebyid(in_id in scott.task.task_id%type,rdata out pa_rcgl.mycursor) as
  begin
   open rdata for
    select * from scott.task
    where task_id=in_id;
  end;
程序代码
//由输入ID查找日程
procedure Tfrmmain.cmdbyidClick(Sender: TObject);
var id:integer;
begin
   if dmd.cds.Active then
       dmd.cds.Close ;
   id:=strtoint(txtid.Text );
   dmd.sspbyid.Params.ParamByName('in_id').Value :=id;
   try
     dmd.dsp.DataSet :=dmd.sspbyid;
     ds.DataSet:=dmd.cds;
     dmd.cds.Open ;   except
     showmessage('err');
   end;
end;
注:cds是clientdataset控件,sspbyid是sqlstroedproc控件,dsp是datasetprivder控件

解决方案 »

  1.   

    dmd.sspbyid.Params.ParamByName('in_id').Value :=id 改成下面的写法试试:

    dmd.sspbyid.Params.Clear;
    dmd.sspbyid.Params.CreateParam(ftInteger, 'in_id', ptInput).Value := id;
    还有,你好歹把错误贴出来吧,你让别人怎么给你分析?
      

  2.   

    dbexpress控件问题,或者oracle驱动问题
    用oracle自带odbc驱动 + ado 试试吧
      

  3.   

    我用ado调用这个过程不管几次,没有任何错误,dbexpress调用只能第一次成功,在调用就说:sspbyid in_id not found,我想最大的可能就是dbepress控件的问题.另外 用3楼的方法不一次调用也不成功