在表中定义两个字段为:
TEngMon_Absence float DEFAULT 1 NOT NULL ,
TEngMon_NormalOT float DEFAULT 1 NOT NULL ,在SQL2K中查表看到是1.0Delphi中代码:
m_dfAbsenceDay := ADOQuery1.FieldByName('TEngMon_Absence').AsFloat;
m_dfNormalOT:= ADOQuery1.FieldByName('TEngMon_NormalOT' ).AsFloat;edAbsence.Text := FormatFloat('0.00', m_dfAbsenceDay);
edNormalOT.Text := FormatFloat('0.00', m_dfNormalOT);edAbsence.Text赋值时没问题,edNormalOT.Text赋值时出EConvertError异常:
''' is not a valid floating point value'我自己重写过FormatFloat,用Format,临时变量值正确,交给result就出错。
?????????

解决方案 »

  1.   

    先让系统返回字符串,然后把它show一下,应该可以看出问题所在。ShowMessage(ADOQuery1.FieldByName('TEngMon_NormalOT' ).AsString);
      

  2.   

    如果看上去没有问题,可以用强制转换:
    var
      TpmStr : String;
      TmpFloat : Float;
    ...TmpStr := ADOQuery1.FieldByName('TEngMon_NormalOT' ).AsString;
    TmpFloat := StrToFloat(TmpStr);
      

  3.   

    这样实现就可以了
    edAbsence.Text  := ADOQuery1.FieldByName('TEngMon_Absence').AsString;
    edNormalOT.Text := ADOQuery1.FieldByName('TEngMon_NormalOT' ).AsString;
    没有问题的!
      

  4.   

    我改成了下面的样子,编译时关了优化,加上所有的调试。单步走,同样的异常:ShowMessage(ADOQuery1.FieldByName('TEngMon_Absence' ).AsString);//显示结果为1
    strTemp := ADOQuery1.FieldByName('TEngMon_Absence').AsString;
    edAbsence.Text := strTemp;
    m_dfAbsenceDay := StrToFloat(strTemp);ShowMessage(ADOQuery1.FieldByName('TEngMon_NormalOT' ).AsString)//显示结果为1;
    strTemp := ADOQuery1.FieldByName('TEngMon_NormalOT' ).AsString;
    edNormalOT.Text := strTemp; <------------这一行报错
    m_dfNormalOT := StrToFloat(strTemp);我试的时候表中的定义用decimal(4,1)/numeric(4,1)/float都用过。都是同样的错。
      

  5.   

    后来的提示什么错误呢?
    我的代码:
    Var
    strTemp:String;
    m_dfAbsenceDay:Double;
    m_dfNormalOT:Double;
    begin
    ShowMessage(ADOQuery1.FieldByName('aa' ).AsString);
    strTemp := ADOQuery1.FieldByName('aa').AsString;
    Edit1.Text := strTemp;
    m_dfAbsenceDay := StrToFloat(strTemp);
    ShowMessage(ADOQuery1.FieldByName('f2' ).AsString);
    strTemp := ADOQuery1.FieldByName('f2' ).AsString;
    edit2.Text := strTemp;
    m_dfNormalOT := StrToFloat(strTemp);
    end;
    aa,f2都是float字段类型的数据  我的没有问题的呀!再看看吧 希望我写的对于你有价值!
      

  6.   

    你在edNormalOT.onchange内有事件吗(或者ADOQuery1有计算字段)?设断点跟踪一下,
      

  7.   

    多谢zhyanger,就是OnChange与前面的代码捣乱。
    edNormalOnChange:
      m_dfNormalOT := StrToFloat(edNormalOT.Text);我在所有控件的Text中加了一个初值,解决了。这么说Delphi中的OnChange是在另一个线程中处理的,没想到这一点。
    所以我跟踪时到不了这里。多谢各位,再加100分。前面的100给zhyanger,另100大家分吧。
      

  8.   

    edAbsence.Text  := ADOQuery1.FieldByName('TEngMon_Absence').AsString;
    edNormalOT.Text := ADOQuery1.FieldByName('TEngMon_NormalOT' ).AsString;