powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DataSet.OnAfterScroll и Next
9 сообщений из 9, страница 1 из 1
DataSet.OnAfterScroll и Next
    #34495467
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
У меня есть датасет (TSmartQuery, ODAC) у него на обработчике OnAfterScroll висит определенный нужный код.
Так же есть операции, которые требуют полного прохода Next'ом по датасету. При этом обработчик срабатывает каждый раз, тратится много времени, хотя мне это не нужно, мне достаточно что бы этот обработчик сработал в конце массовой операции.
Вопрос: Можно ли штатными средствами заблокировать (отключить) этот обработчик на время прохода по датасету?

Для контролов я делаю DisableControls, но на выполнение этого обработчика это не влияет.
Ничего умнее кроме следующих методов я не придумал.
1. Перед началом массовой операции запомнить обработчик и прописать в него nil, а после операции восстановить;
2. Городить свои блокировки в виде выставления глобального флажка.

Хотя первый способ достаточно эффективен и красив, интересует наличие стандартных средств для решения этой проблемы.
...
Рейтинг: 0 / 0
DataSet.OnAfterScroll и Next
    #34495629
Ска
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artemiy
интересует наличие стандартных средств для решения этой проблемы.

Ровно такие, какие вы перечислили...
Artemiy
Так же есть операции, которые требуют полного прохода Next'ом по датасету.

ИМХО : Наверняка, от такой операции можно избавиться...
...
Рейтинг: 0 / 0
DataSet.OnAfterScroll и Next
    #34495630
Фотография oz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первой строкой процедуры AfterScrool должна быть:

Код: plaintext
1.
2.
3.
 procedure  TfrmTitle.odsMainAfterScroll(DataSet: TDataSet);
 begin 
    If  DataSet.ControlsDisabled  Then  Exit;
   ...
...
Рейтинг: 0 / 0
DataSet.OnAfterScroll и Next
    #34495641
Фотография oz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще непонятно зачем делать в AfterScroll единичную операцию.
...
Рейтинг: 0 / 0
DataSet.OnAfterScroll и Next
    #34495702
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozА вообще непонятно зачем делать в AfterScroll единичную операцию.
В AfterScroll выполняется код ответственный за отслеживание выделенного объекта:
реализована сложная система выделения, как в нортон коммандере, у объекта есть ИД, тип, у формы есть массив выделенных объектов. По этой структуре потом определяется доступность актионов и типы возможных операций над выделенными объектами, производится раскраска грида.

Ска
ИМХО : Наверняка, от такой операции можно избавиться...
От таких операций избавится нельзя, потому что это все операции вида: выделить все (а значит пройтись по датасету и занести в структуру ИДы и типы), инвертировать, выделить по значению и т.д.

ozПервой строкой процедуры AfterScrool должна быть:
Код: plaintext
1.
2.
3.
 procedure  TfrmTitle.odsMainAfterScroll(DataSet: TDataSet);
 begin 
    If  DataSet.ControlsDisabled  Then  Exit;
   ...

Такой вариант расмотрен, ладно он все равно медленней чем с обнулением и восстановлением обработчика.

Вообщем спасибо, вопрос исчерпан, остается как есть с обнулением обработчика, меня это решение устраивает.
...
Рейтинг: 0 / 0
DataSet.OnAfterScroll и Next
    #34495823
Фотография oz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
    If  DataSet.ControlsDisabled  Then  Exit;
   
    Try       
      dbgUsers.DataSource.DataSet.DisableControls;
       If  (dbgUsers.SelectedRows.Count =  0 )  Or  (dbgUsers.SelectedRows.Count =  1 )  Then   Begin 
         TempID:=dbgUsers.DataSource.DataSet.FieldByName('ID').AsInteger;
         ...
       End   Else   Begin 
          For  i:= 0   To  dbgUsers.SelectedRows.Count -  1   Do   Begin 
            dbgUsers.DataSource.DataSet.GotoBookmark(Pointer(dbgUsers.SelectedRows.Items[i]));
            TempID:=dbgUsers.DataSource.DataSet.FieldByName('ID').AsInteger;
            ...
          End ;
    Finally 
      dbgUsers.DataSource.DataSet.EnableControls;
    End ;
   ...
...
Рейтинг: 0 / 0
DataSet.OnAfterScroll и Next
    #34833169
xplosn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно поместить код процедуры в AfterOpen, а в конце присвоить ивенту:

ADOQueryXXX.AfterScroll:=ADOQueryXXAfterOpen;
...
Рейтинг: 0 / 0
DataSet.OnAfterScroll и Next
    #34834363
Ega
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то такие вещи в TDataSource.OnDataChange надо помещать.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
DataSet.OnAfterScroll и Next
    #40044278
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DataSet.OnAfterScroll и Next
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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