Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как опеределить что OnAfterScroll и Filter ? / 2 сообщений из 2, страница 1 из 1
06.09.2001, 09:04
    #32013598
DennisL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как опеределить что OnAfterScroll и Filter ?
Проблемма такая !
У меня в событии OnAfterScroll одного TAdoDataset происходит вызов сохраненной продцедуры с параметрами которая возвращает другой Dataset, вобщем две связанные таблицы ...
Так вот открытие второго Dataset занимает некоторое время, которое приемлимо при простых перемещениях юзара по первому dadaset а также при скроллинге, но при открытии SP которая возвращает первый Datset вызываеться OnAfterScroll для каждой строчки .... и программа конкретно подвисает ... с этим я борюсь так :
1. Вставляю в начале OnAfterScroll флаг bDataSetOpen
2. в событии onClose вставляю bDataSetOpen:=False;
3. в событии onOpen вставляю bDataSetOpen:=True;

В этом случае все работает как надо, и при окрытии первого dataset для каждой записи не произходит выполнение кода в onAfterScroll

ТАК ВОТ ТЕПРЬ ПРОБЛЕММА :
У меня появилась необходимость использовать свойство Filter (он устанавливаеться после открытия первого Dataset, а также при изменении параметрв фильтрации при уже открытом Dataset), и теперь я немогу отследить когда происходит выполнение OnAfterScroll после применения фильтра ... Dаtatset.State=dsBrowse
и вообще после применения фильтра Datset ведет себя както странно при использовании колеса мыши чтобы просмотреть записиси довольно большой таблицы (именно если прокручиваються срезу большое кол-во записей) такое ощущение что он снова вызывает onAfterScroll для всех записей таблицы а не только для прокрыченных ...

Если ктонибудь сталкивался с подобными проблеммами подскажите возможные пути решения, или просто о том как в действительности функционирует filter и каие там есть особенности ?

P.S. использую Delphi5, MS SQL 7 и ADO 2.6
...
Рейтинг: 0 / 0
06.09.2001, 11:23
    #32013611
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как опеределить что OnAfterScroll и Filter ?
Такое происходит при организации форм master/detail при помощи обработчиков события OnAfterScroll. Попробуй по другому.
Приведу пример:
Пусть существует два набора, возвращаемых ХП (proc1, proc2). Для первого набора можно использовать компонент TADOStoredProc. Пусть первый набор возвращает поля col1, col2, col3. Причем по полям col1 и col2 должна быть установлена связь с подчиненным набором. Для второго набора используй TADOQuery. В его SQL напиши "proc2 :col1, :col2". В свойство DataSource для этого компонента установи ссылку на компонент TDataSource, который связан с TADOStoredProc (наверняка он уже есть, через него ты привязываеш контролы к первому набору). И самое главное, не заполняй значения параметров для второго набора в редакторе параметров. Теперь открываем первый, а затем второй набор. При правильно выполненных действиях подчиненный набор будет брать параметры для proc2 из набора master. При этом не будет большой задержки при первом открытии (не будет происходить прокрутка всего первого набора данных), и фильтр должен отрабатывать корректно. Единственное ограничение. При вызове метода DisableControls для набора master будет разорвана связь master/detail.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как опеределить что OnAfterScroll и Filter ? / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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