![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перейти к следующе из найденных по какому-либо условию записи [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 ...