请教一个ADOQuery的参数问题(10分)

  • 主题发起人 主题发起人 HeBaisong
  • 开始时间 开始时间
H

HeBaisong

Unregistered / Unconfirmed
GUEST, unregistred user!
不好意思,我想请教一下:ADOQuery的Parameter传送Money型的字段应该如何设置
 
那REAL类型字段如何传递参数呢?
 
AdoQuery1.Parameters.ParamValues['PfltField']:= StrToFloat(Edit1.Text);
 
procedure TForm1.Button1Click(Sender: TObject);
begin
WITH ADOQuery1 DO BEGIN
close;
sql.Clear;
sql.Add('insert into table1(Name,birthday,realN,cost)');
sql.Add('values(:Name,:birthday,:realN,:cost)');
Parameters.ParamByName('Name').value:=Edit1.Text;
Parameters.ParamByName('birthday').Value:=strtodate(Edit2.Text);
Parameters.ParamByName('realN').value:=Strtofloat(edit3.text);
Parameters.ParamByName('cost').value:=strtofloat(Edit4.text);
execsql;
end;
end;
我在form 上放了datesource adoquery dbgrid 通过adoquery1的parameters传递输入参数
并且cost 字段是money类型的,在输出显示的格式限制为“,#.##”
可是执行了上面的button事件时出错,
如果取消格式
限制,则insert成功,
dbgrid就不再显示表中的数据了,是什么原因呢?
多谢高手指点
 
你的Edit4是数据感应元件吗?

你在执行Parameters.ParamByName('cost').value:=strtofloat(Edit4.text);
这一句之前执行这一句:showmessage(edit4.text);
看看取回来的数据是否是这样格式的:123,456.00
这时如果你用strtofloat转换当然不行啦!因为“,”是一个非法的浮点数数值。
直接用FieldByName取得字段值再插入数据库不就可以解决吗?为什么要抓界面上的值呢?

另外,你提到的后面的问题DBGrid为什么不显示数据,是因为你把TADOQuery关闭了,而execsql
又不会返回数据,所以,DBGrid就肯定不会显示数据啦!
 
我已经解决了
谢谢大家
 
后退
顶部