|
Как опеределить что OnAfterScroll и Filter ?
|
|||
---|---|---|---|
#18+
Проблемма такая ! У меня в событии 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2001, 09:04 |
|
Как опеределить что OnAfterScroll и Filter ?
|
|||
---|---|---|---|
#18+
Такое происходит при организации форм 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2001, 11:23 |
|
|
start [/forum/topic.php?fid=58&tid=2120130]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 378ms |
0 / 0 |