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

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

Поиск по базе ... [D5, dBase, FoxPro]


Dionnis ©   (2004-11-19 16:55:00) 

Здравствуйте уважаемые. Мне нужно найти в таблице по индексированному полю какоето значение. Затем найденную таблицу скопировать в таблицу памяти, и продолжить поиск. То есть повторять эти действия до конца файла (формата dbf).
То есть я пишу что то вроде:

while DBF.Locate(FieldName, Value, []) do
 begin
   // Копирование строки;
   DBF.Next;
 end;

Но метод Locate не годится, так как при его вызове происходит поиск значения с самого начала файла, то же самое и с FindKey.

Установка фильтра - слишком долго, так же как и использование SQL запроса. Было бы всё хорошо, если бы имена индексных файлов совпадали с названием таблицы (т.е. table.dbf и индексный файл к нему itable.cdx), тогда бы ограничился SQL запросом, но не всё так просто ...

То есть мне нужен быстрый поиск с использованием индексных файлов, но вот сколько бьюсь пока ничего не выходит.

P.S: Использую Halcyon


Anatoly Podgoretsky   (2004-11-19 17:28:00) [1]

Код приведен в 2 оптимизирующие поправки в 3
С нашей стороны есть надежда, что у тебя в наличии голова.


Dionnis   (2004-11-19 17:22:00) [2]

>Anatoly Podgoretsky

DBF.First;

while FindKey([Значение поля]) do
 begin
   // Копирование строки;
   DBF.Next;
 end;

Я правильно Вас понял?
Но при вызове FindKey([Значение поля]) курсор опять встаёт первую строку 8-(


Johnmen   (2004-11-19 17:16:00) [3]

>Anatoly Podgoretsky ©   (19.11.04 17:10) [3]

Конечно...:)


Dionnis   (2004-11-19 17:15:00) [4]

Это циклом бежать по всему набору данных? Ну а зачем тогда индекс, я ж говорю, мне очень важна скорость поиска. База лежит на сервере, поэтому скорость поиска заметно падает, вот если бы она находилась на компе пользователя ...

>PS Подтяни терминологию.
а что я не так написал?


Anatoly Podgoretsky   (2004-11-19 17:10:00) [5]

DBF.First; -> FindKey

while поле =  do


Johnmen   (2004-11-19 17:08:00) [6]

DBF.First;
while not DBF.Eof do
begin
  if DBF.FieldByName(FieldName).Value=Value then
    // Копирование строки;
  DBF.Next;
end;


PS Подтяни терминологию.


Anatoly Podgoretsky   (2004-11-19 17:01:00) [7]

Они честно выполняют свое предназначение, первая находит по любому критерию, вторая находит по ключу - очень быстро.
Про Halcyon не знаю, но в БДЕ нашел по ключу и далее иди по записям по критерий совпадает.


Наверх

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