![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что отработает раньше: 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 знает настолько, что в исходники даже не полезет? :)