Как отсортировать файл CSV в TTable? - PullRequest
3 голосов
/ 29 декабря 2010

У меня есть TTable, и я загружаю файлы CSV в этот TTable. Здесь есть три поля: Id, Hits & Path. Я сделал несколько полей поиска для этого TTable с другим запросом.

Я хочу отсортировать таблицу. Я получаю сообщение «Возможности не поддерживаются». когда я пытаюсь позвонить AddIndex('ndxHits','HITS',[]);

Вот мой код:

with DM.TblCVResults do
begin
  try
    Active     :=  False;
    TableName  :=  'C:\CSV\123.txt';
    Active     :=  True;

    AddIndex('ndxHits','HITS',[]);
    AddIndex('ndxCandidate','LkCandidate',[]);
    AddIndex('ndxLastCV','LkLastCV',[]);
    AddIndex('ndxPostCode','LkPostCode',[]);
    IndexDefs.Update;
    Active     :=  True;
    DM.TblCVResults.IndexName := 'ndxHits';
  except
    on E: Exception do
      MsgError(E.Message);
  end;
end

1 Ответ

7 голосов
/ 29 декабря 2010

Ваш предыдущий вопрос упоминал, что вы использовали ttASCII в качестве TableType. ttASCII таблицы, AFAIK, не поддерживают индексы.

Лучше всего загружать содержимое ttASCII TTable в TClientDataset` (CDS), который поддерживает индексы. Я не тестировал с таблицей ttASCII в качестве источника, но она должна быть такой простой, как:

Добавьте компонент TDatasetProvider в ваше приложение. Установите для этого свойства DataSet значение TTable.

Добавьте компонент TClientDataSet в свое приложение. Установите ProviderName на DataSetProvider, который вы добавили выше. (Я назвал это CDS в шагах ниже.)

Откройте оба Table и ClientDataSet (CDS) в указанном порядке.

Table1.Active := True;
CDS.Active := True;

Отключите обновление TTable, если оно вам не нужно. (Это намного быстрее.)

CDS.LogChanges := False;

Запустите следующий код для создания индексов:

// Repeat for each additional index
with CDS.IndexDefs.AddIndexDef do
begin
  Name := 'ndxHits';
  Fields := 'Hits';
  Options := [];
end;

Установите для свойства ClientDataSet's IndexName индекс, который вы хотите активировать:

CDS.IndexName := 'ndxHits';

Используйте ClientDataSet, как и любой другой набор данных. Найдите его с помощью Locate или FindKey, добавьте к нему с помощью Insert или Append, отфильтруйте и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...