在delphi中写了一个向数据库的一个表插入数据的小程序,但是出了一个奇怪的问题,请高手帮忙看下,以下是我写的代码:存储结构:
create procedure luru2 /*费用录入*/
 @td varchar(50),@xh varchar(50),@fc varchar(50),@fy varchar(50),@je varchar(50)
as   
insert into 费用(提单号,箱号,封铅号,费用项目,金额)
values(@td,@xh,@fc,@fy,@je)
godelphi的代码:
procedure TForm5.btn1Click(Sender: TObject);
begin
  if(edt1.Text='')or(edt2.Text='')or(edt3.Text='')then
  ShowMessage('红色不能为空')
  else
  begin
   query1.close;
   query1.SQL.clear;
   query1.SQL.add('exec luru2 :@td,:@xh,:@fc,:@fy,:@je');
   query1.Parameters.ParamByName('td').Value:=edt1.Text;
   query1.Parameters.ParamByName('xh').Value:=edt2.Text;
   query1.Parameters.ParamByName('fc').Value:=edt3.Text;
   query1.Parameters.ParamByName('fy').Value:=edt4.Text;
   query1.Parameters.ParamByName('je').Value:=edt5.Text;
   query1.execsql;
   showmessage('录入成功');
   Query1.close;
   Query1.SQL.clear;
   Query1.SQL.add('select * from 费用');
   Query1.SQL.add('where 提单号='''+edt1.text+'''');
   Query1.SQL.add(' and 箱号='''+edt2.text+'''');
   Query1.SQL.add('and 封铅号='''+edt3.text+'''');
   Query1.open;//查询显示
   end;
end;错误提示是:query1:parameter'td'not found
我检查了一下程序没问题啊,而且我写过一个相识的是向另一个表输入数据是可以的,但是这段程序就有问题,不知道为什么

解决方案 »

  1.   

    query1.SQL.add('exec luru2 :@td,:@xh,:@fc,:@fy,:@je');-> query1.SQL.add('exec luru2 :td,:xh,:fc,:fy,:je');
      

  2.   

      query1.SQL.clear;
      query1.SQL.add('exec luru2 :@td,:@xh,:@fc,:@fy,:@je');
      query1.Parameters.ParamByName('td').Value:=edt1.Text;
      query1.Parameters.ParamByName('xh').Value:=edt2.Text;
      query1.Parameters.ParamByName('fc').Value:=edt3.Text;
      query1.Parameters.ParamByName('fy').Value:=edt4.Text;
      query1.Parameters.ParamByName('je').Value:=edt5.Text;
      query1.execsql;->  query1.SQL.clear;
      query1.sql.text:= 'exec luru2 '+QuoteStr(edt1.Text)+','+
                        QuoteStr(edt2.Text)+','+
                        QuoteStr(edt3.Text)+','+
                        QuoteStr(edt4.Text)+','+
                        QuoteStr(edt5.Text);
      query1.execsql;
      

  3.   

    用了存儲過程,那就這樣:(建議多看些基礎的書或DEMO)
    query1.SQL.add('exec luru2 :td,:xh,:fc,:fy,:je');//Parameters傳參數的就不要了
      

  4.   

    使用带参数的存储过程时,你需要先创建参数,然后再使用
    ADOQuery1.Parameters.CreateParameter()
      

  5.   

    为什么不用TADOStoredProc,这个是专门调用存储过程的
    例子
      try
        ADOStoredProc1.Parameters.ParamByName('P_AREA').Value:=Edit1.Text;
        ADOStoredProc1.ExecProc;  
        showmessage('OK!');
      except
        showmessage('Error!');
      end;
      

  6.   

     query1.close;
      query1.SQL.clear;
      query1.SQL.add('exec luru2 :@td,:@xh,:@fc,:@fy,:@je');
      query1.Parameters.ParamByName('td').Value:=edt1.Text;
      query1.Parameters.ParamByName('xh').Value:=edt2.Text;
      query1.Parameters.ParamByName('fc').Value:=edt3.Text;
      query1.Parameters.ParamByName('fy').Value:=edt4.Text;
      query1.Parameters.ParamByName('je').Value:=edt5.Text;
      query1.execsql;
    看到上面说来说去都没有说出错误原因,只是给出了代替方法。这里的错误实际上是在SQL语句中写的参数与赋值的语句上所用参数不同引起的,也就是@td 与'td'是不同的,其它参数也是一样。只要将赋值语句改成如下就可以了:
    query1.Parameters.ParamByName('@td').Value := edt1.Text;
    ……
      

  7.   

    13楼可以的:
    query1.SQL.add('exec luru2 :@td,:@xh,:@fc,:@fy,:@je');
      query1.Parameters.ParamByName('td').Value:=edt1.Text;
      query1.Parameters.ParamByName('xh').Value:=edt2.Text;
      query1.Parameters.ParamByName('fc').Value:=edt3.Text;
      query1.Parameters.ParamByName('fy').Value:=edt4.Text;
      query1.Parameters.ParamByName('je').Value:=edt5.Text;
    ==>
    query1.SQL.add('exec luru2 :@td,:@xh,:@fc,:@fy,:@je');
      query1.Parameters.ParamByName('@td').Value:=edt1.Text;
      query1.Parameters.ParamByName('@xh').Value:=edt2.Text;
      query1.Parameters.ParamByName('@fc').Value:=edt3.Text;
      query1.Parameters.ParamByName('@fy').Value:=edt4.Text;
      query1.Parameters.ParamByName('@je').Value:=edt5.Text;