Главная страница
    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.035 c
3-1100946650
DimDim
2004-11-20 13:30
2004.12.19
Простой запрос на выборку


1-1102261097
ньюбик
2004-12-05 18:38
2004.12.19
Работа с TDateTime


1-1102330341
glGLU
2004-12-06 13:52
2004.12.19
множества


14-1101555083
olookin
2004-11-27 14:31
2004.12.19
Есть ли такое слово в русском языке?


14-1101370125
ИМХО
2004-11-25 11:08
2004.12.19
Слово о В.И.Ленине (Ульянове)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский