| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Halcyon поиск записи |
| Автор: 14SatanA88 21.9.2012, 13:43 | ||||
| Доброго времени суток, уважаемые программеры. Работаю с таблицами данных 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)) из строки индекса, то результат поиска оправдывает ожидания, но необходимость поиска свежей цены по дате убивает смысл этого самого поиска. Помогите разобраться. |
| Автор: Данкинг 21.9.2012, 14:20 |
160000 записей - и .dbf размером всего 20 метров? 1. Переписать прогу на ФоксПро. 2. Использовать другую СУБД - тот же Access. |
| Автор: 14SatanA88 21.9.2012, 14:25 | ||
Уважаемый Данкинг,
Переписать прогу либо использовать другую СУБД не выйдет, предприятие. |
| Автор: Данкинг 21.9.2012, 15:05 |
| А если использовать Tdbf и, соответственно, locate? |
| Автор: 14SatanA88 21.9.2012, 15:09 |
| Данкинг, надо бы попробовать. Если можно, запилите ссылок сразу. |
| Автор: Данкинг 21.9.2012, 15:52 |
Ну, в поиске Tdbf, какие тут ещё ссылки. |
| Автор: 14SatanA88 21.9.2012, 16:28 |
| Поставил 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, хотя находит то что нужно найти. Может, я делаю что-то не так? |
| Автор: Данкинг 21.9.2012, 16:33 | ||
А если после DTOS(DAT) tag descend добавить? |
| Автор: 14SatanA88 21.9.2012, 16:36 | ||
пробовал, ругается что не знает таких слов движок этот... |
| Автор: 14SatanA88 28.9.2012, 14:21 |
| Проблема решилась написанием скрипта на clipper и запуск его собсна из программы на Delphi в нужный момент. |
| Автор: Данкинг 28.9.2012, 16:55 |
В смысле, скрипта - программы .exe, что ли? |
| Автор: 14SatanA88 28.9.2012, 17:20 | ||
да, просто фоновая прожка на клиппере. у них там просто колоссальный выигрыш в скорости по сравнению с Halcyon или Apollo. (я о работе с индексами NTX) |
| Автор: Данкинг 28.9.2012, 17:52 |
| Ну понятно, я таких случаях на фоксе пишу .fxp и запускаю его из проги на Дельфи. |