|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.03.2009, 17:35 | #1 |
Регистрация: 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. |
03.03.2009, 18:54 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
А у вас индексы по каждому из этих полей существуют?
|
04.03.2009, 09:48 | #3 |
Регистрация: 03.03.2009
Сообщений: 5
|
Немного исправил.
Да, индексы существуют, но создавались с помощью DataBase Desktop. Может их программно создавать надо чтобы можно было потом программно поменять? Если даже сделать так Table1.IndexDefs[2].Options := Table1.IndexDefs[2].Options - [ixDescending]; Table1.IndexDefs[2].Options := Table1.IndexDefs[2].Options + [ixDescending]; то всё-равно порядок сортировки не меняется |
04.03.2009, 10:53 | #4 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
|
|
04.03.2009, 12:49 | #5 |
Регистрация: 03.03.2009
Сообщений: 5
|
"При необходимости изменить порядок сортировки по некоторому полю, это удобно сделать либо при настройке свойств таблицы с помощью программы 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 с доступом только на чтение |
04.03.2009, 13:03 | #6 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Программное создание индекса прекрасно описано в хэлпе (F1) в свойстве IndexDefs property (TTable).
Там есть хороший пример. А в вашем нагромождении строк, извините, лень разбираться... |
04.03.2009, 14:26 | #7 | |
Регистрация: 03.03.2009
Сообщений: 5
|
Цитата:
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 |
|
04.03.2009, 14:46 | #8 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
А вы не обратили свое внимание на то, что именно при создании индекса вы указываете направление сортировки?
Кстати, об этом же недвусмысленно сказано и в той выдержке из книги (название которой вы упорно скрываете): Цитата:
Последний раз редактировалось mihali4; 04.03.2009 в 14:48. |
|
04.03.2009, 18:07 | #9 | |
Регистрация: 03.03.2009
Сообщений: 5
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как переместить курсор 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 |