Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
ВнизЧто отработает раньше: TDataSet.OnCalcField Найти похожие ветки
← →
Ega23 © (2006-11-16 09:38) [0]или TDataLink.ActiveChanged контрола, "смотрящего" на этот DataSet?
← →
ЮЮ © (2006-11-16 09:46) [1]А поставить бряки? Или, надеешься, что кто-то VCL знает настолько, что в исходники даже не полезет? :)
← →
Ega23 © (2006-11-16 09:51) [2]
> А поставить бряки? Или, надеешься, что кто-то VCL знает
> настолько, что в исходники даже не полезет? :)
Не надо меня идиотом считать. Бряки не ставил, но в исходники сам слазил. По исходникам - сначала CalcFields для ActiveBuffer отработает, а потом рассылка пойдёт.
Интересует не упустил ли я чего-либо.
← →
evvcom © (2006-11-16 10:12) [3]> [2] Ega23 © (16.11.06 09:51)
> Бряки не ставил, но в исходники сам слазил
Лучше бряки поставь. Подтверди свою гипотезу практикой. Хотя, имхо, вроде очередность логичная. Но у всех разные понятия о логичности того или иного.
← →
ЮЮ © (2006-11-16 10:24) [4]А я разглядел другое:
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 ControlsDisabled then
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.
А вычислять свои вычислимые поля он, по-моему, без надобности не будет.
← →
Anatoly Podgoretsky © (2006-11-16 10:31) [5]> evvcom (16.11.2006 10:12:03) [3]
Конечно, зачем словам верить, даже самого провереного человека, все равно ведь ошибиться может, пускай редко, но даже самые, самые, самые гуру иногда ошибаются, особенно когда на память надеются.
← →
ЮЮ © (2006-11-16 10:46) [6]А бряки запросто показали:
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 не идиот бряки ставить. Зачем, если другие идиотв найдутся :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.048 c