通常我们查询sql表中某一字段(此字段类型为float型)的空值时,sql语句为select * from a where isnull(sl,0)=0,这样既能查到sl字段为0或为null值的记录;但在DBgrideh1column7UPDATEDATE事件中添加如下代码(sql表a的内容通过qy1显示在dbgrideh1中),procedure TSSPBM.DBGridEh1Columns7UpdateData(Sender: TObject;
  var Text: String; var Value: Variant; var UseText, Handled: Boolean);
  var i:integer;
begin
  for i:=0 to DBGrideh1.ComponentCount-1 do
  if DBGrideh1.Components[i] is TInplaceEdit then
  Edit1.text := TEdit(DBGrideh1.Components[i]).Text;
  DBgrideh1.columns[20].picklist.Clear;
  if (qy1.fieldbyname('snw').asfloat<>0) and (qy1.fieldbyname('nwgt').asfloat<>0) and (strtofloat(edit1.text)<>0) then
      qy1.fieldbyname('qxl').Value:=(strtofloat(edit1.text)-qy1.fieldbyname('nwgt').asfloat)/strtofloat(edit1.text)*100;
end;
意为当snw字段变化时,自动更新qxl字段,但在DBGRIDEH1中将snw字段按退格键删除该字段值时,提示' ''is not a valid floating point value'错误,该错误发生在(strtofloat(edit1.text)<>0)处,是因为此时edit1.text的值为'',请问在此处该如何写edit1.text的值为空;如果是字符型的话用edit1.text<>''即可,但这里是float型,请问该如何写?

解决方案 »

  1.   

    没怎么看懂楼主的意思,可以尝试使用sql语句来进行更新或者添加
    update还有insert into
      

  2.   

    procedure TSSPBM.DBGridEh1Columns7UpdateData(Sender: TObject;
      var Text: String; var Value: Variant; var UseText, Handled: Boolean);
    var
      i:integer;
      vStr : double;
    begin
      for i:=0 to DBGrideh1.ComponentCount-1 do
      if DBGrideh1.Components[i] is TInplaceEdit then
      Edit1.text := TEdit(DBGrideh1.Components[i]).Text;
      DBgrideh1.columns[20].picklist.Clear;  if TryStrToFloat(Edit1.text,vStr) then
      begin
        if (qy1.fieldbyname('snw').asfloat <>0) and (qy1.fieldbyname('nwgt').asfloat <>0) and (strtofloat(edit1.text) <>0) then
           qy1.fieldbyname('qxl').Value:=(strtofloat(edit1.text)-qy1.fieldbyname('nwgt').asfloat)/strtofloat(edit1.text)*100;
      end
    end;
      

  3.   


    也可TryStrToFloat(Edit1.text,vStr)改为vStr := StrToFloatDef(Edit1.text,0)
      

  4.   

    谢谢,你可能没有完全明白我的意思,但通过你的答复此问题解决了
    procedure TSSPBM.DBGridEh1Columns7UpdateData(Sender: TObject;
      var Text: String; var Value: Variant; var UseText, Handled: Boolean);
      var i:integer;
    begin
      for i:=0 to DBGrideh1.ComponentCount-1 do
      if DBGrideh1.Components[i] is TInplaceEdit then
      Edit1.text := TEdit(DBGrideh1.Components[i]).Text;
      DBgrideh1.columns[20].picklist.Clear;
      if length(trim(edit1.text))=0 then
        edit1.text:='0';
      if (qy1.fieldbyname('snmpdz').asfloat<>0) and (qy1.fieldbyname('snw').asfloat<>0) then
        qy1.fieldbyname('mpzb').Value:=(qy1.fieldbyname('snmpdz').asfloat-strtofloat(edit1.text))/qy1.fieldbyname('snmpdz').asfloat*100;
      if (qy1.fieldbyname('snw').asfloat<>0) and (qy1.fieldbyname('nwgt').asfloat<>0) and (strtofloat(edit1.text)<>0) then
          qy1.fieldbyname('qxl').Value:=(strtofloat(edit1.text)-qy1.fieldbyname('nwgt').asfloat)/strtofloat(edit1.text)*100;end;
      

  5.   

    select isnull(字段名,0) as 字段名, ... from ...