我的意图是向数据表中插入数据!! 先检测后插入!!!
代码如下:
with query1 do begin
      close;
      sql.Clear ;
      sql.Add('select 商品编号 from shangpin where 商品编号=:id');
      parambyname('id').asstring:=trim(edit1.text);
      open;
      if   fieldbyname('商品编号').asstring='' then begin
      sql.Clear ;
      sql.Add('insert into shangpin(商品编号,商品名称,单位,规格) values(:sid,:smc,:sdw,:sgg)');
      parambyname('sid').asstring:=trim(edit1.text);
      parambyname('smc').asstring:=trim(edit3.text);
      parambyname('sdw').asstring:=trim(edit2.text);
      parambyname('sgg').asstring:=trim(edit4.text);
      execsql;
      end; end;

解决方案 »

  1.   

    if   fieldbyname('商品编号').asstring='' then begin
          Close;//这个不能少吧
          sql.Clear ;
          sql.Add('insert into shangpin(商品编号,商品名称,单位,规格) values(:sid,:smc,:sdw,:sgg)');
          parambyname('sid').asstring:=trim(edit1.text);
          parambyname('smc').asstring:=trim(edit3.text);
          parambyname('sdw').asstring:=trim(edit2.text);
          parambyname('sgg').asstring:=trim(edit4.text);
          execsql;
          end; end;
      

  2.   

    with query1 do begin
          close;
          sql.Clear ;
          sql.Add('select * from shangpin where 商品编号=:id');
          parambyname('id').asstring:=trim(edit1.text);
          open;
          if Not  fieldbyname('商品编号').asstring='' then 
          begin
          Insert;
          FieldByName('sid').asstring:=trim(edit1.text);
          FieldByName('smc').asstring:=trim(edit3.text);
          FieldByName('sdw').asstring:=trim(edit2.text);
          FieldByName('sgg').asstring:=trim(edit4.text);
          Post;
          end; end;
      

  3.   

    同意TOMWLD(笑天)的建议
    少了一个“close;”