![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск по базе ... [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 не знаю, но в БДЕ нашел по ключу и далее иди по записям по критерий совпадает.