powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ADOStoreProc.FindNext
11 сообщений из 11, страница 1 из 1
ADOStoreProc.FindNext
    #32367687
Андрей GR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, уже замучал меня этот вопрос...
Как искать поочереди нужные записи с одним значением ?

procedure TForm1.BtnFndClick(Sender: TObject);
begin
Stroka:=EditFnd.Text;
ADOStoredProc1.FindNext;
end;

procedure TForm1.ADOStoredProc1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept :=ADOStoredProc1TIP_korp.Value = Stroka;
end;


Если это проделать через TTable , тогда все работает. Но если через TADOStoreProc - тогда не будет. Чего за глюк, и как с ним бороться ?
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32367751
Андрей GR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл дописать... Если ADOStoredProc1.Filterd:=true - тогда срабатывает процедура procedure TForm1.ADOStoredProc1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
Если false - тогда вообще не срабатывает :-(

P.S. Всех с Новым годом! Особенно обезьян! :-)))
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32367779
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У ADOStoredProc, насколько я понял, другая логика работы. Вызов FilterRecord происходит не во время перемещения по DataSet, а в момент его формирования при получении набора данных с сервера. То есть, необходимое правило выбора записей должно быть определено перед вызовом Open или Exec
А то, что срабатывает только при ADOStoredProc1.Filterd:=true, то я вообще-то не понял почему это вызывает удивление? :)
Это свойство для того и предназначено, чтобы включать/выключать вызовы FilterRecord.
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32367783
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, я обычно необходимое условие выбора вставляют либо непосредственно в запрос, либо передаю как параметр в хранимую процедуру. Зачем тащить все записи из таблицы на клиента, чтобы потом из них делать выборку? Пусть уж сервер сам выберет то, что нужно, и перешлёт только нужные мне записи.
Кстати, в этом случае при правильно настроенных индексах можно получить существенное ускорение в работе, поскольку при филтрации на клиенте индексы уже не работают (поскольку остались на сервере :) ).
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32367899
Андрей GR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я использую ADOStoreProc - для вызова запроса с параметрами из MSAccess.
В справочниках порядка 100 записей, мне нужно их не фильтровать по условиям, а перемещатся по записям кнопкой на форме "Продолжить поиск".
К примеру как в Word'e ввел искомое слово, а он перемещается по поисковым словам в документе.
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32367933
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
locate ?
____
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32367965
Андрей GR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Locate - переходит до первой подходящей записи, а мне нужно чтобы дальше он перемещался по набору и искал подходящюю строку.
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32368870
AM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AM
Гость
Например, вот так производится поиск вперед по первым буквам (испол-ся ADOQuery, можно и ADOStoredProc)

procedure TfrmFindFio.bbtnFindNextClick(Sender: TObject);
begin
if adoqryFindFio.Active then
begin
try
if Length(Trim(edtFio.Text))>0 then
begin
adoqryFindFio.Filter:='[FIO] LIKE ('''+edtFio.Text+'*'')';
adoqryFindFio.FindNext;
end;
except
end;
end;//if adoqryFindFio.Active

end;
Соответственно, поиск назад FindPrior.
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32369904
ТимДругой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а при смене фильтра он все же по старому фильтру прыгаеть....
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32370883
AM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AM
Гость
To ТимДругой:
При смене фильтра нужно сначала найти первую запись Locate-ом, а потом уже использовать FindPrior и FindNext.
...
Рейтинг: 0 / 0
ADOStoreProc.FindNext
    #32372706
Андрей GR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделал так: Сначало ищу строчку FindPrior, затем FindNex'ом.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ADOStoreProc.FindNext
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]