procedure Tf_scgcd.BitBtn1Click(Sender: TObject);
var
  aq: tadoquery;
begin
  aq := tadoquery.Create(application);
  aq.Connection := dmdb;
  with aq do
  begin
    close;
    sql.clear;
    begin
      sql.add('select colour,pcs1, pcs2 from sctzditm where tzdno = ' + '''' + qymst.fieldbyname('tzdno').AsString + '''');
      open;
    end;
    with aq do
    begin
      DisableControls;
      First;
      while not eof do
      begin
        qysp.Append;
        qysp.FieldByName('colour').AsString := fieldbyname('colour').AsString;
        qysp.FieldByName('pcs1').AsFloat   := fieldbyname('pcs1').AsFloat;
        qysp.FieldByName('pcs2').AsFloat   := fieldbyname('pcs2').AsFloat;
        next;
      end;
    end;
  end;
  qysp.EnableControls;
  aq.free;
end;
点第一下全都可以调进来,点第二下的时候会调用重复的
有没有办法在点第二下的时候如果有相同colour那么pcs1, pcs2的数量相加
比如 colour  pcs1  pcs2
      红色    10    10
      白色    15    15
这是第一次调过来的
如果第二次调用相同的那么就是
colour  pcs1  pcs2
红色     20    20
白色     30    30         

解决方案 »

  1.   

    存在時改用edit,不存在就append;  while not eof do
      begin
        if qysp.locate('colour',fieldbyname('colour').AsString,[]) then
           qysp.Edit
        else begin
          qysp.Append;
          qysp.FieldByName('colour').AsString := fieldbyname('colour').AsString;
        end;
        qysp.FieldByName('pcs1').AsFloat := qysp.FieldByName('pcs1').AsFloat+fieldbyname('pcs1').AsFloat;
        qysp.FieldByName('pcs2').AsFloat := qysp.FieldByName('pcs2').AsFloat+fieldbyname('pcs2').AsFloat;
        next;
      end;
      

  2.   

    添加记录时用APPEND
    修改记录时用EDIT
      

  3.   

    添加记录时用APPEND
    修改记录时用EDIT