Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

множественная выборка из массива собственной базы данных [D6, WinXP]


Страницы:   1 2

Login_Andrew ©   (2003-01-10 13:13:00) 

Есть собственная база данных, с использованием типизированного файла.
Я столкнулся с весьма непростой задачей, которая состоит в том, чтобы сделать выборку по базе данных всех записей, соответствующую заданному вначале критерию, прямо внутри файла!
Например, база данных (типизированный файл типа record) с записями "aa"(№0), ...."abing"(№256), "btri"(№257),..... "cting"(№4567), "ctt"(№4568), ....."ddd"(№7000), "dding"(№7001), ....."ddss"(№20045), "hhh"(20046), ......"hhhhing"(№40567)....... и т.д. ....№-ная запись(№50000).
Критерий выборки - выбрать все записи, которые включают такие части слова, как "ing" или "dd" или "dding", например сделать выборку для слова "adding".
Конечным результатом должен быть неповторяющийся список, который бы включал записи с ключевыми словами "abing", "cting", "ddd", "dding", "ddss", как выборка для слова "adding".
Простая выборка, применяя последовательный цикл, например, for do или while do, дает результат, но при общем числе записей в базе данных ~ 50 000 подобный способ и долог и не весьма эффективен.
Желательно практический пример.


Digitman   (2003-01-10 15:33:00) [21]


> собственная база данных с использованием типизированного
> файла и она более чем меня устраивает


Да на здоровье ! Никто ж не требует от тебя отказаться от собственного контейнерного формата.


> В ней я применяю бинарный поиск, который в данном примере
> не подходит, так как дает лишь одно значение.


Опять же - ничто не мешает тебе реализовать систему индексации и быстрый поиск/фильтрацию по ключу в индексе. Ведь в тех же TTable/TClientDataSet реализовано это !

Ну, не нравится тебе идея с собств.наследником TDataSet - воспользуйся готовым TClientDataSet. Он позволяет "на ходу" строить произвольные, достаточно эффективные индексы в памяти и содержит станд.методы фильтрации/сортировки/доступа к НД с использованием этих индексов. Все, что от тебя потребуется - загрузить НД из твоего файла через св-во Data, построить нужные индексы и установитьь фильтр (EditKey/SetKey/SetRange и т.п.).
Зато ты получишь полную совместимость со станд. VCL-контролами, требующими в кач-ве источника данных объект-наследник TDataSet


Anatoly Podgoretsky   (2003-01-10 15:17:00) [22]

Login_Andrew (10.01.03 15:12)
Откуда я знаю как он у тебя реализован, ты же не приводишь его.
Если не брать в расчет создание специализированного TDataSet, то проще всего загнать в TStringList, если конечно ты точно привел формат твоего файла.

Ты зочешь получить какой то квалифицированный совет и в тоже время не приводишь достаточно информации.


Login_Andrew   (2003-01-10 15:12:00) [23]

Anatoly Podgoretsky
А что значит - цикл не оптимальный?
Вы можете привести пример оптимального цикла?
Вы можете набросать хотя бы простенький пример подобного решения или дать ссылку...

neXt и для Digitman
У меня собственная база данных с использованием типизированного файла и она более чем меня устраивает. В ней я применяю бинарный поиск, который в данном примере не подходит, так как дает лишь одно значение.
Может Вы можете подсказать реальный пример хеширования или иного метода?


Digitman   (2003-01-10 14:09:00) [24]

Напиши своего наследника TDataSet.
Для выборки по нужным тебе критериям пользуй обычные Filter/Filtered-св-ва либо обрабатывай должным образом событие OnFilterRecord()


Anatoly Podgoretsky   (2003-01-10 13:38:00) [25]

Может у тебя цикл не оптимальный?


neXt   (2003-01-10 13:30:00) [26]

Можно ещё разместить данные в XML формате и тогда можно будет применять к ним операции множественной выборки XSLT, это полегче чем SQL-БД, но всётки изврат. Но просто текст лопатить кроме как циклом не выйдет.


neXt   (2003-01-10 13:27:00) [27]

Чтобы рещать такие задачи, нужно изменить способ хранения. Идеально, это SQL-совместимая БД (или файл к которому можно былобы обращаться как к БД), тогда более эффективное решение возможно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо