Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что отработает раньше: TDataSet.OnCalcField [D5, MSSQL]


Ega23 ©   (2006-11-16 09:38:00) 

или TDataLink.ActiveChanged контрола, "смотрящего" на этот DataSet?


ЮЮ   (2006-11-16 10:46:00) [1]

А бряки запросто показали:

procedure TDataSet.SetActive(Value: Boolean);
begin
 if (csReading in ComponentState) then
 begin
   FStreamedActive := Value;
 end
 else
   if Active <> Value then
   begin
     if Value then
     begin
       DoBeforeOpen;
       try
          OpenCursor;  // здесь вызовется TDataSet.CalculateFields</B
                                         
       finally
         if State <> dsOpening then
            OpenCursorComplete;  здесь вызовется  DataEvent(deUpdateState, 0);
       end;
     end else
     begin
       if not (csDestroying in ComponentState) then DoBeforeClose;
       SetState(dsInactive);
       CloseCursor;
       if not (csDestroying in ComponentState) then DoAfterClose;
     end;
   end;
end;

З.Ы. Но Ega23 не идиот бряки ставить. Зачем, если другие идиотв найдутся :)


Anatoly Podgoretsky   (2006-11-16 10:31:00) [2]

> evvcom  (16.11.2006 10:12:03)  [3]

Конечно, зачем словам верить, даже самого провереного человека, все равно ведь ошибиться может, пускай редко, но даже самые, самые, самые гуру иногда ошибаются, особенно когда на память надеются.


ЮЮ   (2006-11-16 10:24:00) [3]

А я разглядел другое:

procedure TDataSet.SetState(Value: TDataSetState);
begin
 if FState <> Value then
 begin
   FState := Value;
   FModified := False;
   DataEvent( deUpdateState, 0);
 end;
end;

procedure TDataSet.DataEvent(Event: TDataEvent; Info: Longint);
begin
 NotifyDataSources := not (ControlsDisabled or (State = dsBlockRead));
   deUpdateState:
     if ControlsDisabledthen
     begin
       Event := deDisabledStateChange;
       Info := Integer(State <> dsInactive);
       NotifyDataSources := True;
     end;
 end;

 if NotifyDataSources then
 begin
   for I := 0 to FDataSources.Count - 1 do
     TDataSource(FDataSources[I]).DataEvent(Event, Info);
   if FDesigner <> nil then FDesigner.DataEvent(Event, Info);
 end;
end;


Н.д. изменил статус, оповестил DataSources, те DataLinks.
А вычислять свои вычислимые поля он, по-моему, без надобности не будет.


evvcom   (2006-11-16 10:12:00) [4]

> [2] Ega23 ©   (16.11.06 09:51)
> Бряки не ставил, но в исходники сам слазил

Лучше бряки поставь. Подтверди свою гипотезу практикой. Хотя, имхо, вроде очередность логичная. Но у всех разные понятия о логичности того или иного.


Ega23   (2006-11-16 09:51:00) [5]


> А поставить бряки? Или, надеешься, что кто-то VCL знает
> настолько, что в исходники даже не полезет? :)


Не надо меня идиотом считать. Бряки не ставил, но в исходники сам слазил. По исходникам - сначала CalcFields для ActiveBuffer отработает, а потом рассылка пойдёт.
Интересует не упустил ли я чего-либо.


ЮЮ   (2006-11-16 09:46:00) [6]

А поставить бряки? Или, надеешься, что кто-то VCL знает настолько, что в исходники даже не полезет? :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо