Форум: "Базы";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Вниз
Поиск по базе ... Найти похожие ветки
← →
Dionnis (2004-11-19 16:55) [0]Здравствуйте уважаемые. Мне нужно найти в таблице по индексированному полю какоето значение. Затем найденную таблицу скопировать в таблицу памяти, и продолжить поиск. То есть повторять эти действия до конца файла (формата 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:01) [1]Они честно выполняют свое предназначение, первая находит по любому критерию, вторая находит по ключу - очень быстро.
Про Halcyon не знаю, но в БДЕ нашел по ключу и далее иди по записям по критерий совпадает.
← →
Johnmen © (2004-11-19 17:08) [2]
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:10) [3]DBF.First; -> FindKey
while поле = do
← →
Dionnis (2004-11-19 17:15) [4]Это циклом бежать по всему набору данных? Ну а зачем тогда индекс, я ж говорю, мне очень важна скорость поиска. База лежит на сервере, поэтому скорость поиска заметно падает, вот если бы она находилась на компе пользователя ...
>PS Подтяни терминологию.
а что я не так написал?
← →
Johnmen © (2004-11-19 17:16) [5]>Anatoly Podgoretsky © (19.11.04 17:10) [3]
Конечно...:)
← →
Dionnis (2004-11-19 17:22) [6]>Anatoly Podgoretsky
DBF.First;
while FindKey([Значение поля]) do
begin
// Копирование строки;
DBF.Next;
end;
Я правильно Вас понял?
Но при вызове FindKey([Значение поля]) курсор опять встаёт первую строку 8-(
← →
Anatoly Podgoretsky © (2004-11-19 17:28) [7]Код приведен в 2 оптимизирующие поправки в 3
С нашей стороны есть надежда, что у тебя в наличии голова.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.058 c