首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi循环有关问题

2012-04-04 
delphi循环问题procedure Tf_scgcd.BitBtn1Click(Sender: TObject)varaq: tadoquerybeginaq : tadoquer

delphi循环问题
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

 

[解决办法]
存在時改用edit,不存在就append;

Delphi(Pascal) code
  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; 

热点排行