![]() |
|
![]() ![]() ![]() |
|
14SatanA88 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
Доброго времени суток, уважаемые программеры.
Работаю с таблицами данных dBase IV. Есть одна таблица весом в 20 мегабайт, в которой 160000 записей. В таблице содержатся цены на модели шмоток. Необходимо отобрать актуальные цены на определенный перечень моделей (перечень этот часто меняется, но это не столь важно). Моделей около 500, немного. Опишу некоторые поля таблицы, которые участвуют в отборе цен: НАИМЕНОВАНИЕ ПОЛЯ (ТИП ПОЛЯ, ШИРИНА) TER (CHARACTER, 1) - код территории. POL (NUMERIC, 4) - код получателя. MOD (CHARACTER, 10) - собственно модель шмотки. KODV (NUMERIC, 1) - код валюты. DAT (DATE, 8) - дата цены. Значит, изначально у нас есть модель, код территории, код получателя и код валюты. Нужно по этим критериям выбрать самую свежую цену (поскольку в таблице может хранится несколько цен разных дат) Сперва просто использовал компонент TQuery и запросом отбирал нужную информацию, но на это тратится очень много времени. В итоге стал использовать Halcyon, а точнее THalcyonDataSet. Динамически цепляю индекс.
Дальше проблема, из-за которой я вообще создал этот топик: хочу найти цену по четырем заданным критериям (все, кроме даты)
В итоге выбирается не то, что нужно Если убрать DESCEND(DTOS(DAT)) из строки индекса, то результат поиска оправдывает ожидания, но необходимость поиска свежей цены по дате убивает смысл этого самого поиска. Помогите разобраться. Это сообщение отредактировал(а) 14SatanA88 - 21.9.2012, 14:29 |
||||
|
|||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
160000 записей - и .dbf размером всего 20 метров? ![]() 1. Переписать прогу на ФоксПро. 2. Использовать другую СУБД - тот же Access. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
Уважаемый Данкинг,
Переписать прогу либо использовать другую СУБД не выйдет, предприятие. |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
А если использовать Tdbf и, соответственно, locate?
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
Данкинг, надо бы попробовать.
Если можно, запилите ссылок сразу. |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Ну, в поиске Tdbf, какие тут ещё ссылки. ![]() -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
Поставил tDBF, создал индекс.
MOD + TER + STR(KODV,1) + STR(POL,4) + DESCEND(DTOS(DAT)) - вот такой не съел, потому что не знает о DESCEND. MOD + TER + STR(KODV,1) + STR(POL,4) + DTOS(DAT) - вот этот съел, но сортировка нужна по ДАТЕ в обратную сторону. DTOS(DAT) + MOD + TER + STR(KODV,1) + STR(POL,4), [ixDescending] - попробовал вот так, но, видимо, из-за даты долго работает Locate, хотя находит то что нужно найти. Может, я делаю что-то не так? Это сообщение отредактировал(а) 14SatanA88 - 21.9.2012, 16:31 |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
А если после DTOS(DAT) tag descend добавить? -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
пробовал, ругается что не знает таких слов движок этот... |
|||
|
||||
14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
Проблема решилась написанием скрипта на clipper и запуск его собсна из программы на Delphi в нужный момент.
|
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
В смысле, скрипта - программы .exe, что ли? -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
да, просто фоновая прожка на клиппере. у них там просто колоссальный выигрыш в скорости по сравнению с Halcyon или Apollo. (я о работе с индексами NTX) |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Ну понятно, я таких случаях на фоксе пишу .fxp и запускаю его из проги на Дельфи.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |