2013/06/14

ClientDataSet上使用GROUP BY篩選

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

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

直接把結果轉出來吧!


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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化

沒有留言:

張貼留言