dbedit1 中输入单价  dbedit2中输入数量
在dbedit3中得到“总金额”dbedit。text 转换过程中老报错。请哪位帮忙解决。

解决方案 »

  1.   

    edit3.text:=floattostr(strtofloat(trim(edit1.text))* strtofloat(trim(edit2.text)));
      

  2.   

    设置字段的值:
    1、设置数据集为编辑状态: (Edit)
    2、修改字段的值; (FieldByName("FieldName")->Value = XXX;)
    3、Post;
      

  3.   


    //推荐使用StrToFloatDef,可以默认值,如果转换失败,则返回默认值,不会抛出异常!
    //还有StrToIntDef,StrToDateTimeDef,自己看帮助吧!
    dbedit3.Text := FloatToStr(
      StrToFloatDef(Trim(dbedit1.Text), 0) *
      StrToFloatDef(Trim(dbedit2.Text), 0)
      );
      

  4.   

    按jzinfo报错:---------------------------
    Debugger Exception Notification
    ---------------------------
    Project ZFGJJ.exe raised exception class EConvertError with message ''' is not a valid floating point value'. Process stopped. Use Step or Run to continue.
    ---------------------------
    OK   Help   
    ---------------------------
      

  5.   

    应该在数据集的字段中去处理。
    可以用以下方法:
    procedure TXXForm.OnCalcCash(sender: TField);
    var
      sumCash: double;
    begin
      sumCash := DataSet.FieldByName(单价字段).asFloat*DataSet.FieldByName(数量字段);
      //处理sumCash结果,比如保存到记录集等
    end;动态绑定事件,需要在打开记录集后,就绑定。
    DataSet.FindField(单价字段).OnChange := OnCalcCash;
    DataSet.FindField(数量字段).OnChange := OnCalcCash;
      

  6.   

    1.楼主可以自定义一个计算字段,DBEdit3只需与此字段相关联即可。并在数据集的计算事件(OnCalcFields)中执行计算,这种方法需要在调用数据集的Post方法之后才可以看到结果:
    procedure TDM.DataSet1CalcFields(DataSet: TDataSet);
    begin
      DataSet.FieldByName('总金额').AsFloat := 
        StrToFloatDef(DataSet.FieldByName('单价').AsFloat, 0) * StrToFloatDef(DataSet.FieldByName('数量').AsFloat, 0);
    end;2.楼主可以在DBEdit1和DBEdit2的OnChange事件中执行计算,这种方法很直接,可以立刻看到计算结果:
      if (DataSet1.State in dsEditModes) then
        DataSet1.FieldByName('总金额').AsFloat := 
          StrToFloatDef(DataSet1.FieldByName('单价').AsFloat, 0) * StrToFloatDef(DataSet1.FieldByName('数量').AsFloat, 0);