Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
3-1100608109
Tor
2004-11-16 15:28
2004.12.19
из dbf в txt через TADODataSet


1-1101937791
Profi
2004-12-02 00:49
2004.12.19
Сохранения в файл


1-1101760067
Dmitry
2004-11-29 23:27
2004.12.19
Как при нажатии на кнопку закрытия свернуть программу вместо выхо


4-1099829125
SPeller
2004-11-07 15:05
2004.12.19
Combobox


14-1101234275
panov
2004-11-23 21:24
2004.12.19
Правила ведения дискуссий.




   Наверх