Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ПРИВЕТ ВСЕМ! Метод Locate возвратит мне true и...


@andrew ©   (2002-12-23 11:27:00) 

поставит курсор на найденную запись, а как бы мне узнать, что такая запись не одна и соотв. перейти на следующую, удовлетворяющую условиям поиска. Есть что-то вроде LocateNext :?)


Anatoly Podgoretsky   (2002-12-23 13:00:00) [1]

MsGuns © (23.12.02 12:56)
Я на них и намекал, перемещение по полученому набору, который соответствует Locate - очень шустро и логика ояень простая
Альтернативу назвали - фильтр, но это может быть очень медленно, если записей в фильтре мало, а исходных много.


MsGuns   (2002-12-23 12:56:00) [2]

>Anatoly Podgoretsky © (23.12.02 12:49)
>MsGuns © (23.12.02 11:38)
>2-й. Не требует поиска, а только перемещение

Перемещение по 2-му НД (под словом "искать" я имел в виду перемещение Prior/Next с простой проверкой на Bof/Eof), а в родном все же Locate несколько шустрее, чем тупое Next с проверками 8). Или я не прав ?



--------------------------------------------------------------------------------


Anatoly Podgoretsky   (2002-12-23 12:49:00) [3]

MsGuns © (23.12.02 11:38)
2-й. Не требует поиска, а только перемещение


sniknik   (2002-12-23 12:37:00) [4]

+5-й. Поставить нужный фильтр, и FindFirst, FindNext, FindPrior по нему, не применяя к датасет (filtered=false). (работает для ADO) FindNext при невыполнении фильтра оставит курсор на месте.


MsGuns   (2002-12-23 11:38:00) [5]

Способов несколько, но, к сожалению, все надо писать ручками.

1-й. Простым просмотром записей с отключением грида от датасорса и использованием букмарки для возврата назад в случае неудачного поиска. В конце поиска присоединять к гриду ds

2-й. Выполнить запрос и искать не в "родном" НД, а в том, что вернул query. При обнаружении делать Locate в "родном" НД, например, по уникальному идентификатору записи.

3-й. Использовать "параллельный" НД в памяти, а в нем искать простым последовательным пробегом. Годитсядля относительно небольших НД.

4-й. Опять же использовать запрос, но указывать доп.условие типа WHERE ID > <Идент-р текущей записи>


Наверх

Титульная страница Поиск, карта сайта Написать письмо