![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Последующий поиск [D7, dBase, FoxPro]
abhtr © (2006-03-22 09:17:00)Как осуществить последующий поиск записей по заданному вначале ключу. Т.е. первую запись нахожу по
tblDBF.Locate(sFindField,sFindValue,[loCaseInsensitive, loPartialKey]);
А как найти следующую запись? После этой.
Виталий Панасенко (2006-03-22 15:39:00) [1]select с нужным условием - и тогда все данные будут те, что нужно
Lexer (2006-03-22 15:38:00) [2]abhtr (22.03.06 15:12) [5]
>Кстати, кто-нибудь знает, какой алгоритм поиска у locate.
Вот небольшая вырезка из DBTables, здесь можно только догадываться (т.к. нет bde.pas), но помоему накладывается фильтр, и активизируется первая строка, после чего фильтр убирается.
DbiActivateFilter(FHandle, Filter);
Status := DbiGetNextRecord(FHandle, dbiNoLock, Buffer, nil);
DbiDropFilter(FHandle, Filter);
Result := Status = DBIERR_NONE;
Sergey13 (2006-03-22 15:16:00) [3]2[5] abhtr (22.03.06 15:12)
>Кстати, кто-нибудь знает, какой алгоритм поиска у locate.
Так любой поиск идет перебором. Важно что и как перебирать. 8-)
abhtr (2006-03-22 15:12:00) [4]Сейчас так и делаю - отфильтровываю. Но при некоторых работах удобнее, чтобы поиск был как в Far-е. Поэтому и хочеться реализовать именно такой способ поиска. С findnext не пробовал. Кстати, кто-нибудь знает, какой алгоритм поиска у locate. Перебором? Или как-то иначе? Без индекса.
vovnuke (2006-03-22 15:00:00) [5]А для каких целей? А то ведь можно отфильтровать по этому ключу.
Sergey13 (2006-03-22 13:31:00) [6]2abhtr (22.03.06 09:17)
>А как найти следующую запись?
Универсально - перебор в цикле со сравнением с эталоном. Работает всегда и везде.
sniknik (2006-03-22 13:24:00) [7]> но попробуй tblDBF.findnext
если в том что он использует есть findnext..., то использовать его надо после findfirst а не Locate. вообще в справке должно быть по используемому движку.
Megabyte (2006-03-22 13:14:00) [8]Могу ошибаться(нет возможности проверить), но попробуй tblDBF.findnext