Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1102097937
grigory
2004-12-03 21:18
2004.12.19
Экспорт из DLL паскаля в Delphi


1-1102187540
Bobby Digital
2004-12-04 22:12
2004.12.19
Компонент


1-1102405062
Игорь_
2004-12-07 10:37
2004.12.19
Форма закладка


1-1102091894
The Vizit0r!
2004-12-03 19:38
2004.12.19
цикл как процесс


1-1102097199
A man
2004-12-03 21:06
2004.12.19
Self во внешних Юнитах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский