делаю правильно, создаю индекс, присваиваю его название ClientDataSet1.IndexName, первый раз сортировка работает, а после удаления индекса и создания нового - нет
// Удаляем существующий индекс, если он есть
if ClientDataSet1.IndexDefs.IndexOf(IndexName) <> -1 then
begin
ClientDataSet1.IndexDefs.Delete(ClientDataSet1.IndexDefs.IndexOf(IndexName));
end;
ClientDataSet1.IndexName:='';
// Создаем новый индекс
IndexDef := ClientDataSet1.IndexDefs.AddIndexDef;
IndexDef.Name := IndexName;
IndexDef.Fields := Column.FieldName;
if FSortOrder = soDescending then
IndexDef.Options := [ixDescending] else IndexDef.Options := [];
// Применяем новый индекс
ClientDataSet1.IndexName := IndexName;
ClientDataSet1.First;
В чем может быть дело?
А просто свойство IndexFieldNames не прокатит?
неа, нужно сортировать и в обратном направлении :(
Нашёл у нас в коде, так заполняется: Dataset.AddIndex(Dataset.Fields[i].FieldName, Dataset.Fields[i].FieldName, []); Dataset.AddIndex(Dataset.Fields[i].FieldName+'_DESC', Dataset.Fields[i].FieldName, [ixDescending]);
переделал так, она стала на второй раз ругаться, что Name is not unique. Не пойму, я чищу индексы так: ClientDataSet1.IndexDefs.Clear; ClientDataSet1.IndexDefs.Update; Потом добавляю так: IndexName = '_inx'; if FSortOrder = soDescending then ClientDataSet1.AddIndex(IndexName,Column.FieldName,[ixDescending]) else ClientDataSet1.AddIndex(IndexName,Column.FieldName,[]); и как будто они не очищаются, и поэтому выводится ошибка о неуникальности
IndexDefs - это ещё не индексы, а описание индексов. Сами индексы создаются по описанию при открытии датасета либо что-то ещё нужно вызвать.
Огромное спасибо! Точно, дело было в этом, затупил
Не используй TClientDataset. Используй любой memory dataset.
Обсуждают сегодня