Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2011, 17:33   #1
sdsfy
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 27
По умолчанию Непонятные вызовы AfterScroll вTIBDataset

Приветствую коллег!

Есть Датасет, в котором определены поли. пара которых является fkLookup.

В этом датасете, по обработчику AfterScroll, я выполняю некоторые операции.
На TIBDataset ссылается TDataSource, на который, в свою очередь, ссылаются TDBGrid и TDBNavigator.

При открытии таблицы происходит многократная генерация событий вызывающих обработчик Afterscroll. Я так понимаю, что это связано с тем, что у меня определены поля fkLookup. Может и ошибаюсь.

Мне надо, чтоб обработчик AfterScroll вызывался только на фактическую смену курсора в DBGrid.

Кто может сказать, где искать решение?
sdsfy вне форума Ответить с цитированием
Старый 02.09.2011, 18:02   #2
sdsfy
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 27
По умолчанию

Некоторые эксперименты опровергли часть подозрений, но внесли новые непонятки.

У IBDataset Определены обработчики BeforeClose и AfterOpen.
В BeforeClose я запоминаю позицию зациси для Locate после переоткрытия
В AfterOpen Я делаю Locate. Так вот. Если вызываю Locate, Обработчик AfterScroll вызывается 5 раз на Набор Данных, состоящий всего из одной записи. Если не вызывать Locate в AfterOpen , то вне зависимости от числа записей в НД AfterScroll вызывается всего один раз.

Но где еще можно вызывать Locate, чтоб не было такого многократного вызова AftelScroll? А может есть лучший способ, чем Locate?
sdsfy вне форума Ответить с цитированием
Старый 02.09.2011, 20:27   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
IBDataset.AfterScroll:=nil;
IBDataset.Locate(...);
IBDataset.AfterScroll:=IBDatasetAfterScroll;
IBDataset.AfterScroll(IBDataset);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.09.2011, 22:02   #4
sdsfy
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 27
По умолчанию

Спасибо!
Хорошая идея (нечто аналогичное, ранее было опробовано с меньшей результативностью), но все равно вызывается 2 раза. Хотя уже не 5.
Убрав
Код:
IBDataset.AfterScroll(IBDataset);
начало вызываться только 1 раз. т.к. как и должно быть. Что, как мне кажется - странно.
sdsfy вне форума Ответить с цитированием
Старый 02.09.2011, 22:54   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
начало вызываться только 1 раз. т.к. как и должно быть. Что, как мне кажется - странно.
Зря убрали, Locate указатель на другую запись переведет, а AfterScroll не отработает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.09.2011, 01:49   #6
sdsfy
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Зря убрали, Locate указатель на другую запись переведет, а AfterScroll не отработает
Согласен.

И даже больше, собственно правильный код будет таким
Код:
IBDataset.Close;//если требуется
IBDataset.AfterScroll:=nil;
IBDataset.Open;//
IBDataset.Locate(...);
IBDataset.AfterScroll:=IBDatasetAfterScroll;
AfterScroll(IBDataset);
Еще раз спасибо!
sdsfy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AfterScroll MigelCNB Общие вопросы Delphi 2 26.10.2010 13:18
непонятные слова kupall Общие вопросы Delphi 1 02.06.2010 22:33
Ошибка на событие AfterScroll!!! $T@LKER БД в Delphi 0 29.04.2010 19:37
Системные вызовы... bek@rt Win Api 2 03.05.2007 02:48