procedure Tfrmwlbh.btnaddClick(Sender: TObject);
begin
  if edtwlbh.Text='' then
    begin
      showmessage('物料编号不能为空!');
      exit;
    end;
    with adoquery do
      begin
        close;
        sql.Clear;
        sql.Add('select * from bhb where 物料编号=:wlbh');
        Parameters.ParamByName('wlbh').Value:=trim(edtwlbh.Text);
        open;
        if adoquery.RecordCount>0 then
          begin
            messagedlg('该编号已存在,请更改编号!',mtinformation,[mbyes],0);
            edtwlmc.Text:='';
            edtwlbh.Text:='';
            edtwlzl.Text:='';
            edtdwjg.Text:='';
            edtkw.Text:='';
            edtwlbh.SetFocus ;
        end
      else
        //if (edtwlbh.Text ='') or (edtwlmc.Text ='') or(edtwlzl.Text ='')or(edtdwjg.Text ='')or(edtkw.Text ='') then
          //begin
            //showmessage('请输入完整信息!');
            //exit;
          //end;        try
          with adoquery do
            begin
              close;
              sql.Clear;
              sql.Add('insert into bhb (物料编号,物料名称,物料种类,单位价格,库位) values(:wlbh,:wlmc,:wlzl,:dwjg,:kw)');
              Parameters.ParamByName('wlbh').Value:=trim(edtwlbh.Text);
              Parameters.ParamByName('wlmc').Value:=trim(edtwlmc.Text);
              Parameters.ParamByName('wlzl').Value:=trim(edtwlzl.Text);
              Parameters.ParamByName('dwjg').Value:=edtdwjg.Text;//该类型是货币类型,
              Parameters.ParamByName('kw').Value:=trim(edtkw.Text);
              execsql;
              showmessage('添加成功!');
              with adoquery do
                begin
                  close;
                  sql.Clear ;
                  sql.Add('insert into log (姓名,时间,操作内容)');
                  sql.Add('values(:name,:time,:cznr)');
                  Parameters.ParamByName('name').Value:=trim(frmmain.username);
                  parameters.ParamByName('time').Value:=now;
                  Parameters.ParamByName('cznr').Value:=trim(btnadd.Caption +'物料信息');
                  execsql;
                end;
              edtwlmc.Text:='';
              edtwlbh.Text:='';
              edtwlzl.Text:='';
              edtdwjg.Text:='';
              edtkw.Text:='';
              edtwlbh.SetFocus ;
            end;
        except
          showmessage('添加失败!');
        end;
    end;
  with adoquery do
    begin
      close;
      sql.Clear;
      sql.Add('select * from bhb');
      open;
    end;
end;
在进行添加信息的时候,如果添加信息全部填写,则不会出错,如果只填写若干项,则出现 标准数据类型不匹配的错误   Parameters.ParamByName('dwjg').Value:=edtdwjg.Text;//该dwjg是货币类型 如果改成文本类型则不会出现上述错误 不知道应该如何写这句话,才能取出货币类型的值  请高手帮忙 十分感谢!!!!!!!!

解决方案 »

  1.   

    Parameters.ParamByName('dwjg').Value:=edtdwjg.Text;//该类型是货币类型,
    如果你没有写全,那么edtdwjg.text应该为'',是无法转换为货币类型的,所以报错。你可以在添加前,判断一下,用户是否填写了这个数据。
      

  2.   

    Parameters.ParamByName('dwjg').Value:=strtofloat(edtdwjg.Text)
      

  3.   

    我先查询了一下 然后不允许它为空  也只能这样解决了
    呵呵
    在delphi中怎样将DBgrid中显示的数据导出到excel中? 请高手指点!!!!!!!!!!
      

  4.   

    我要有DBgrid中显示的数据导出到excel中的代码.要的QQ找我.670089636
      

  5.   

    插入之前加入
    if edtdwjg.Text='' then  edtdwjg.Text:='0';
    这样不就行了,不写的话,就是为0啊