在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
我检查了一下程序没问题啊,而且我写过一个相识的是向另一个表输入数据是可以的,但是这段程序就有问题,不知道为什么
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
我检查了一下程序没问题啊,而且我写过一个相识的是向另一个表输入数据是可以的,但是这段程序就有问题,不知道为什么
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;
query1.SQL.add('exec luru2 :td,:xh,:fc,:fy,:je');//Parameters傳參數的就不要了
ADOQuery1.Parameters.CreateParameter()
例子
try
ADOStoredProc1.Parameters.ParamByName('P_AREA').Value:=Edit1.Text;
ADOStoredProc1.ExecProc;
showmessage('OK!');
except
showmessage('Error!');
end;
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;
……
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;