![]() |
|
|
![]()
|
|
| BigMazy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 22.2.2003 Репутация: нет Всего: нет |
Здравствуйте!
Возникла такая проблема: Создал таблицу в парадоксе. Структура таблицы такая: id - целочисленный идентификатор (пер. ключ) value - строковое значение Создал индекс по полю value с именен index_value Однако, сортировка выполняется только по возрастанию т.е. от A до Z. По убыванию (от Z до А) НЕ сортирует! Смену сортировки делал следующим образом: Table_ruler.IndexDefs[1].Options:=Table_ruler.IndexDefs[1].Options+[ixDescending]; или в зависимости от сортировки Table_ruler.IndexDefs[1].Options:=Table_ruler.IndexDefs[1].Options+[ixDescending]; Table_ruler.IndexName:='index_value'; Как сменить порядок сортировки с "по возрастанию" на "по убыванию"? PS: Как я понял из чтения форумов - свойство IndexDefs применяется только при создании таблицы, но не при вызове из других процедур.... так ли? Это сообщение отредактировал(а) BigMazy - 8.10.2007, 19:37 |
|||
|
||||
| ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Загляни в хелп, там наверняка пример есть.
Это сообщение отредактировал(а) ALeXandrK - 8.10.2007, 19:10 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
| Esperito |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: 2 Всего: 3 |
Вообще-то, ты должен делать два индекса - по одному для каждого направления.
|
|||
|
||||
| BigMazy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 22.2.2003 Репутация: нет Всего: нет |
Да, конечно, сдедать два индекса по каждому напралению - это самое прямое решение, но ведь это очень не рационально с точки зрения ресурсов, если база данных достаточно масштабная и имеет много полей по которым необходимо делать соритровку
Да и к тому же, раз индекс в одном напрвлении уже существует, то он годится и для использования в другом напрвлении. Наверняка есть программное решение вопроса. Да и к тому же, ведь есть значение свойства поля IndexDefs как ixDescending, которое должно программно задавать направление сортировки А хелп я читал.... не работает... Вот полный код - как по хелпу. Table_ruler.IndexName:='index_value'; Table_ruler.Active := False; Table_ruler.Exclusive := True; Table_ruler.IndexDefs.Update; Table_ruler.IndexDefs[1].Options:= Table_ruler.IndexDefs[1].Options+[ixDescending]; Table_ruler.Exclusive := False; Table_ruler.Active := True; Фигня какая-то с этой сортировкой! Это сообщение отредактировал(а) BigMazy - 8.10.2007, 21:43 |
|||
|
||||
| BigMazy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 22.2.2003 Репутация: нет Всего: нет |
Очень интерсно!!! Нашел статью о механизме BDE и там доказываеся что через BDE и tTable обратную сортировку вообще не возможно сделать!!! Вот адрес статьи ___http://www.ibase.ru/devinfo/bde.htm
А вот цитата из неё "... Вернемся к запросу, которым TTable открыл таблицу. В конце запроса стоит указание порядка сортирвки - ORDER BY FIELD ASC. По умолчанию TTable сортирует данные в порядке поля первичного ключа. И кстати, если пользоваться свойством TTable.IndexName, то все равно к запросу будет добавляться ORDER BY INDEXFIELD ASC. Таким образом получается, что свойство IndexName при работе с SQL-серверами бессмыслено. Вместо него нужно просто использовать свойство IndexFieldNames. Даже если в этом свойстве указать поле, по которому нет индекса, то все равно BDE "прицепит" к запросу ORDER BY FIELD ASC. Кстати, BDE абсолютно игнорирует направление индекса, и всегда в запросе добавляет ASC, даже если индекс по этому полю создан как DESCENDING (по убыванию). Получается, что отсортировать таблицу в TTable по убыванию нельзя...." Неужели всё так печально? |
|||
|
||||
| Esperito |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: 2 Всего: 3 |
Ты должен сделать индекс для обратной сортировки.
Нет, не годится. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |