Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

Поиск по базе ...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
3-1100784403
Bless
2004-11-18 16:26
2004.12.19
события в MSSQL


3-1101185081
Submarine
2004-11-23 07:44
2004.12.19
Падение сервера Interbase


14-1101816466
h00k
2004-11-30 15:07
2004.12.19
Помогите с задачкой


3-1100752786
Vladik
2004-11-18 07:39
2004.12.19
Настройки соединения для ADO


14-1101561146
asdqwer
2004-11-27 16:12
2004.12.19
Количество отснятых фильмов