运行后,当所有的edit里面都有值时能通过,但是当edtshl.Text,edtxl.text,edtcq.text里面不给值时报错说"从varchar到float类型转换时出错",请问是什么原因?哪位高手帮我修改一下程序,当我用table控件时,edtshl.Text,edtxl.text,edtcq.text不给值时能通过,为什么用query不行?在所有的字段里面除KCBM,KCMC不允许为空外,其它的都允许空的.在这个问题上我发了好多个贴子了,到现在还没有解决,有人知道原因吗?
procedure TfrmNew.btnOKClick(Sender: TObject);
var
  a:variant;
begin
  a:=NULL;
    with KCDM.qryNew do
    begin
      close;
      sql.Clear;
      sql.Add('insert into KC0(KCBM,KCMC,KCLB,KCDW,KCSHL,KCXL,KCGG,KCCQ,科目名,科目号)');
      sql.Add('values(:BM,:MC,:LB,:DW,:SHL,:XL,:GG,:CQ,:KMMC,:KMDM)');
      Params.ParamByName('BM').Value:=edtBM.Text;
      Params.ParamByName('MC').Value:=edtMC.Text;
      Params.ParamByName('LB').Value:=edtLB.Text;
      Params.ParamByName('DW').Value:=edtDW.Text;
      Params.ParamByName('GG').Value:=edtGG.Text;
      Params.ParamByName('KMMC').Value:=edtKMMC.Text;
      if trim(edtSHL.Text)='' then
        Params.ParamByName('SHL').Value:=a
      else
        Params.ParamByName('SHL').Value:=strtofloat(edtshl.Text);
      if trim(edtXL.Text)='' then
        Params.ParamByName('XL').Value:=a
      else
        Params.ParamByName('XL').Value:=strtofloat(edtxl.Text);
      if trim(edtKMDM.Text)='' then
        Params.ParamByName('KMDM').Value:=a
      else
        Params.ParamByName('KMDM').Value:=strtoint(edtKMDM.Text);
      if trim(edtCQ.Text)='' then
        Params.ParamByName('CQ').Value:=a
      else
        Params.ParamByName('CQ').Value:=strtoint(edtCQ.Text);
      ExecSQL;
    end;    // with
  end;
end;

解决方案 »

  1.   

    当edtshl.Text,edtxl.text,edtcq.text里面不给值时
    那就
    edtshl.Text:='0';
    edtxl.text:='0';
    edtcq.text:='0';
      

  2.   

    你应该再检查一下edit中的字符转换float是否成功,如果不为'',但字符串不能转换为float,也会出错的。
      

  3.   

    试试:
          if trim(edtSHL.Text)='' then
            Params.ParamByName('SHL').Clear
      

  4.   

    感谢fengzhengren的解答,我根据你的方法改了一点点,现在好用了,谢谢!