var tmpquery:tstoredproc;
begin
                      tmpquery.Close;                      
                      tmpquery.StoredProcName:='ImpBudgetById';
                      tmpquery.Params.Clear;
                      tmpquery.Params.CreateParam(ftinteger,'gsetid',ptinput);
                      tmpquery.Params.CreateParam(ftinteger,'gyear',ptinput);                      
                      tmpquery.Params.CreateParam(ftinteger,'gmainid',ptinput);                                            
                      tmpquery.ParamByName('gsetid').AsInteger:= gsetid;
                      tmpquery.ParamByName('gyear').AsInteger:= gyear;
                      tmpquery.ParamByName('gmainid').AsInteger:= conversion;                      try
                        //tmpquery.Prepare;
                        //tmpquery.ExecProc;
                        tmpquery.ExecSQL;
                      except    
                      on E:Exception do
                        begin
                             MessageDlg('查询数据错误!原因为:'+char(13)+char(10)+E.Message,MtError,[mbok],0);
                             writelog('unt_budgetexporimp',selectsql,pchar(E.Message));
                        end;                      
                      end;      
end;

解决方案 »

  1.   

    写错了,还有两句漏了.
    var tmpquery:tstoredproc;
    begin
    tmpquery:=tstoredproc.create(self);                      
    tmpquery.DatabaseName := Session.Databases[0].DatabaseName;
    tmpquery.Close;                      
                          tmpquery.StoredProcName:='ImpBudgetById';
                          tmpquery.Params.Clear;
                          tmpquery.Params.CreateParam(ftinteger,'gsetid',ptinput);
                          tmpquery.Params.CreateParam(ftinteger,'gyear',ptinput);                      
                          tmpquery.Params.CreateParam(ftinteger,'gmainid',ptinput);                                            
                          tmpquery.ParamByName('gsetid').AsInteger:= gsetid;
                          tmpquery.ParamByName('gyear').AsInteger:= gyear;
                          tmpquery.ParamByName('gmainid').AsInteger:= conversion;                      try
                            //tmpquery.Prepare;
                            //tmpquery.ExecProc;
                            tmpquery.ExecSQL;
                          except    
                          on E:Exception do
                            begin
                                 MessageDlg('查询数据错误!原因为:'+char(13)+char(10)+E.Message,MtError,[mbok],0);
                                 writelog('unt_budgetexporimp',selectsql,pchar(E.Message));
                            end;                      
                          end;      
    end;执行后出现错误,general sql error,ora-06550,第一行,第七列,pls-00201,必须说明标识符:ImpBudgetById,ImpBudgetById是oracle中存储过程的名字,我用pl/sql测试过的,没问题啊,可是用delphi怎么会出错?
      

  2.   

    tmpquery.Prepare;  
    tmpquery.ExecProc;  //tmpquery.ExecSQL;  这行去掉
      

  3.   

    不知道楼主平时都是怎么执行存贮过程的,竟然用tmpquery.ExecSQL
    反正我一直是这样tmpquery.ExecProc 来执行存贮过程的,呵呵
      

  4.   

    还有你的这句tmpquery.Close;   表示什么意思? 存贮过程用来close的???