ClientDataSet上使用GROUP BY篩選

ClientDataSet對已經收到的資料集是不能再下SQL語法篩選的。

不過,把GROUP BY的邏輯想通應該也可以如法泡製。

直接把結果轉出來吧!


procedure TfmMain.CDS_GroupBy_Proc(cdsSource: TClientDataSet; GroupFieldName1,
  GroupFieldName2: string);
var
  Field1, Field2:string;
begin
  with cdsSource do
  begin
    IndexFieldNames := GroupFieldName1;
    First;
    Field1 := FieldByName(GroupFieldName1).AsString;
    Field2 := FieldByName(GroupFieldName2).AsString;
    Next;   //迴圈從第二行開始
    while not Eof do
    begin
      //相同工程的時候
      if (Field1 = FieldByName(GroupFieldName1).AsString) and
         (Field2 = FieldByName(GroupFieldName2).AsString) then
      begin
        Prior;    //Delete成為最後一筆記錄的時候,為了Eof物件不會變成True
        Delete;
      end
      else
      begin
        Field1 := FieldByName(GroupFieldName1).AsString;
        Field2 := FieldByName(GroupFieldName2).AsString;
      end;

      Next;
    end;
    //您選擇的第一行
    First;
  end;
  try
    cdsSource.ApplyUpdates(0);
  except
    mmoLog.Lines.Add('CDS_GroupBy_Proc Error');
  end;
end;

參考來源:ClientDataSet上のGroup By化

留言

這個網誌中的熱門文章

對於 Delphi 10.1 Berlin 推出的看法

IntraWeb 學習日記:【Login】