Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2009, 17:35   #1
adriano
 
Регистрация: 03.03.2009
Сообщений: 5
По умолчанию Не применяется параметр Options для Table1.IndexDefs.IndexOf[i]

Доброго времени суток. Столкнулся с данной проблемой:
Не применяется параметр Options для Table1.IndexDefs.IndexOf[i] при работе с компонентом Table, БД - Paradox.

Привожу пример из книжки, в котором производится сортировка по возрастанию (или по убыванию):

procedure TForm1.Button5Click(Sender: TObject);
begin
case Radiogroup1.ItemIndex of
0: Table1.IndexName := 'FAddress';
1: Table1.IndexName := 'indFCity';
end;
case Radiogroup2.ItemIndex of
0: Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options :=
Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options +
[ixDescending];
1: Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options :=
Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options -
[ixDescending];
end;
end;


Если добавить Table1.IndexDefs в инспектор объектов и поменять параметры Options в нём, то тоже не помогает.

Сортировку по убыванию можно сделать только через Database Desktop.

Если кто может, помогите советом почему программно не работает параметр Options.
Спасибо.

Последний раз редактировалось adriano; 04.03.2009 в 09:43.
adriano вне форума Ответить с цитированием
Старый 03.03.2009, 18:54   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А у вас индексы по каждому из этих полей существуют?
mihali4 вне форума Ответить с цитированием
Старый 04.03.2009, 09:48   #3
adriano
 
Регистрация: 03.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А у вас индексы по каждому из этих полей существуют?
Немного исправил.
Да, индексы существуют, но создавались с помощью DataBase Desktop.
Может их программно создавать надо чтобы можно было потом программно поменять?

Если даже сделать так
Table1.IndexDefs[2].Options := Table1.IndexDefs[2].Options - [ixDescending];
Table1.IndexDefs[2].Options := Table1.IndexDefs[2].Options + [ixDescending];
то всё-равно порядок сортировки не меняется
adriano вне форума Ответить с цитированием
Старый 04.03.2009, 10:53   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Привожу пример из книжки
Что за книга? Кажется, вы что-то не дочитали...
mihali4 вне форума Ответить с цитированием
Старый 04.03.2009, 12:49   #5
adriano
 
Регистрация: 03.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Что за книга? Кажется, вы что-то не дочитали...
"При необходимости изменить порядок сортировки по некоторому полю, это удобно сделать либо при настройке свойств таблицы с помощью программы Database Desktop, либо при создании индексов программно путём задания значения ixDescending для параметра Options."
И приводится пример с Table1.IndexDefs[i].Options

Если Table1.IndexDefs[i].Options служит только для чтения, тогда чтобы поменять порядок сортировки, нужно пересоздавать индекс. Возможно имелось ввиду это:

case Radiogroup2.ItemIndex of
0: Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options :=
Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options -
[ixDescending];
1: Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options :=
Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options +
[ixDescending];
end;
Table1.Close;
Table1.AddIndex(Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Name, Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Fields, Table1.IndexDefs
[Table1.IndexDefs.IndexOf(Table1.Ind exName)].Options);
Table1.Open;

В таком виде работает. Поправьте меня что правильно или неправильно, особенно про Table1.IndexDefs[i].Options с доступом только на чтение
adriano вне форума Ответить с цитированием
Старый 04.03.2009, 13:03   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Программное создание индекса прекрасно описано в хэлпе (F1) в свойстве IndexDefs property (TTable).
Там есть хороший пример.
А в вашем нагромождении строк, извините, лень разбираться...
mihali4 вне форума Ответить с цитированием
Старый 04.03.2009, 14:26   #7
adriano
 
Регистрация: 03.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Программное создание индекса прекрасно описано в хэлпе (F1) в свойстве IndexDefs property (TTable).
Там есть хороший пример.
А в вашем нагромождении строк, извините, лень разбираться...
procedure TForm1.Button6Click(Sender: TObject);
begin
case Radiogroup2.ItemIndex of
0: with Table1 do AddIndex(IndexDefs[IndexDefs.IndexOf(IndexName)].Name, IndexDefs[IndexDefs.IndexOf(IndexName)].Fields, (IndexDefs[IndexDefs.IndexOf(IndexName)].Options - [ixDescEnding]));
1: with Table1 do AddIndex(IndexDefs[IndexDefs.IndexOf(IndexName)].Name, IndexDefs[IndexDefs.IndexOf(IndexName)].Fields, (IndexDefs[IndexDefs.IndexOf(IndexName)].Options + [ixDescEnding]));
end;
Table1.Exclusive := False;
Table1.Open;
end;


Немного по другому сделал.
Строк много потому что индекс создаётся на основе уже существующего индекса.
Но я то хотел узнать можно ли его не создавать заново для изменения например порядка сортирвки, а просто поменять программно параметр options ? то есть поменять Table1.IndexDefs[i].Options
adriano вне форума Ответить с цитированием
Старый 04.03.2009, 14:46   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А вы не обратили свое внимание на то, что именно при создании индекса вы указываете направление сортировки?
Кстати, об этом же недвусмысленно сказано и в той выдержке из книги (название которой вы упорно скрываете):
Цитата:
При необходимости изменить порядок сортировки по некоторому полю, это удобно сделать либо при настройке свойств таблицы с помощью программы Database Desktop, либо при создании индексов программно путём задания значения ixDescending для параметра Options.
Если не хотите связываться с этой рутиной, используйте библиотеку EhLib, там для DBGrid-a это реализовано.

Последний раз редактировалось mihali4; 04.03.2009 в 14:48.
mihali4 вне форума Ответить с цитированием
Старый 04.03.2009, 18:07   #9
adriano
 
Регистрация: 03.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А вы не обратили свое внимание на то, что именно при создании индекса вы указываете направление сортировки?
Кстати, об этом же недвусмысленно сказано и в той выдержке из книги (название которой вы упорно скрываете):

Если не хотите связываться с этой рутиной, используйте библиотеку EhLib, там для DBGrid-a это реализовано.
Спасибо. Библиотека интересная.
adriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как переместить курсор DBGrid1 / Table1 1900s БД в Delphi 3 28.05.2008 17:49
Form3.Table1.FieldByname('Data').Asdate:=Strtodate (Edit2.Text); - ошибка Alex_7_4_1 БД в Delphi 3 06.05.2008 22:41
Есть ли функция для cos параметр которого не радианы, а градусы? Gromsky Помощь студентам 6 14.03.2008 16:26
OpenDialog.Options:=OpenDialog.Options+[ofAllowMultiSelect]; necky Компоненты Delphi 2 11.08.2007 12:53
Options Button hate86 Помощь студентам 22 03.08.2007 08:55