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

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

Как перейти к следующе из найденных по какому-либо условию записи [D6]


Lamo_xxxx ©   (2004-04-28 08:38:00) 

есть набор данных(ADOQuery).
делаю поиск...

ADOQuery1.Locate('name','xx',[loCaseInsensitive, loPartialKey]);

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


sniknik   (2004-04-28 13:30:00) [1]

ну тогда делать по другому.

хотя использование фильтра в серверных решениях это экзотика, если он нужен то скорее всего получили кучу лишних данных, просадили сетку... и т.д. (имхо естественно)


ZrenBy   (2004-04-28 12:56:00) [2]

...findfirst, findnext ..

А если нужен и фильтр и финд одновременоо ?


Vlad   (2004-04-28 10:47:00) [3]


> Lamo_xxxx ©   (28.04.04 10:01) [5]

Для TIBQuery метод Locate организован с помощью обычного цикла while not eof ...
Его не трудно написать самому.
Или есть готовый метод LocateNext


sniknik   (2004-04-28 10:42:00) [4]

ZrenBy ©   (28.04.04 09:27) [4]
это похоже попытка собственной реализации поиска по индексу. посмотри в хелп по findfirst, findnext ..


Lamo_xxxx   (2004-04-28 10:01:00) [5]

круто...

а для TIBQuery есть что-нибудь похожее?


ZrenBy   (2004-04-28 09:27:00) [6]

В копилку. Вариант для ADODataSet & SQLOLEDB


procedure TForm1.ButtonFindClick(Sender: TObject);
var n:Integer;
begin
// ADOQuery1.SQL.Text := ' use pubs select * from authors';
 if(ButtonFind.Tag=0)then begin
   ADOQuery1.Recordset.AbsolutePosition := 1;
   ADOQuery1.Recordset.Find('au_id like '+QuotedStr('%-72-%'),0,adSearchForward,0);
   if not(ADOQuery1.Recordset.EOF or ADOQuery1.Recordset.BOF)then begin
     ButtonFind.Tag := 1;
   end else begin
     Application.MessageBox('Нету','',0);
     Exit;
   end;
 end else begin
   ADOQuery1.Recordset.Find('au_id like '+QuotedStr('%-72-%'),1,adSearchForward,0);
   if(ADOQuery1.Recordset.EOF or ADOQuery1.Recordset.BOF)then begin
     ButtonFind.Tag := 0;
     ButtonFindClick(nil);
     Exit;
   end;
 end;
 n := ADOQuery1.Recordset.AbsolutePosition - 1;
 ADOQuery1.First;
 ADOQuery1.MoveBy(n);
end;


Lamo_xxxx   (2004-04-28 09:01:00) [7]

А вот в TIBQuery есть интересный метод

LocateNext()

пробовал...
делает тоже самое, что Locate(), хотя по названию должен вроде нечто иное делать..


Lamo_xxxx   (2004-04-28 08:58:00) [8]

findfirst, findnext

работают только если установлен фильтр?


sniknik   (2004-04-28 08:46:00) [9]

1 сортировка и Next пока равно.
2 паралельный запрос с выбором ID записей удовлетворяющих условию, перемещение по ID
3 поиск по фильтру findfirst, findnext ...


Наверх

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