18

我正在解析数据集并为TStringList我想避免重复分配值。我使用以下代码,但仍插入重复项。

  channelList := TStringList.Create;
  channelList.Duplicates := dupIgnore;
  try
    dataset.First;
    while not dataset.EOF do
    begin
        channelList.Add(dataset.FieldByName('CHANNEL_INT').AsString)  ;
        dataset.Next;
    end;

为什么要添加重复项?

4

2 回答 2

36

您确实阅读了http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStringList.Duplicates,不是吗?

然后您错过了那里重复次数最多的单词-“排序”

channelList.Sorted := true

var F: TField;

channelList := TStringList.Create;
channelList.Sorted := True;
channelList.Duplicates := dupIgnore;

try
   dataset.First;
   F := dataset.FieldByName('CHANNEL_INT');
   while not dataset.EOF do
   begin
      channelList.Add(F.AsString);
      dataset.Next;
   end;
于 2013-07-16T08:56:21.470 回答
9

开箱即用并避免预先重复?

我不知道您使用的是什么数据库,但例如在 SQL 服务器上,这只是查询的问题:

'SELECT DISTINCT CHANNEL_INT FROM MYTABLE';

然后你可以将结果添加到你的TStringList而不用担心重复。

于 2013-07-16T09:07:02.653 回答