Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

Зачем придумали DataSource?   Найти похожие ветки 

 
StriderMan ©   (2006-11-17 10:49) [0]

Я конечно понимаю где и как он используется в Delphi, но мне кажется это лишняя прослойка между DataSet и контролами. Объясните глубокую мысль разработчиков VCL.


 
Плохиш ©   (2006-11-17 10:51) [1]


> StriderMan ©   (17.11.06 10:49)  

Эта прослойка позволяет унифицировать связи различных DBAware-компонентов с различными источниками данных.


 
StriderMan ©   (2006-11-17 10:53) [2]


> Плохиш ©   (17.11.06 10:51) [1]

в TDataSet и так все есть что нужно, ИМХО.


 
ЮЮ ©   (2006-11-17 11:05) [3]

TDataSet.DisableControls не общается с контролами, а с DataSiurce. Иначе ему пришлось бы общаться с TControl, а тому знать о существовании TDataSet. А так с DataSet-ом (через DataSource) знакомятся только DB-Aware компоненты.


 
Игорь Шевченко ©   (2006-11-17 11:12) [4]

В Delphi придумано много лишнего. Не обращай внимания


 
StriderMan ©   (2006-11-17 11:32) [5]


> Иначе ему пришлось бы общаться с TControl, а тому знать  о существовании TDataSet

зачем TControl"у знать о DataSet? о нем могли бы знать TDBXxx-контролы.


> TDataSet.DisableControls не общается с контролами, а с DataSiurce.


какая разница, знает о контролах DataSet или DataSource?


> Игорь Шевченко ©   (17.11.06 11:12) [4]

Вы и это серьезно? т.е. сабж тоже вызывает у вас сомнения в необходимости?


 
Игорь Шевченко ©   (2006-11-17 11:48) [6]

StriderMan ©   (17.11.06 11:32) [5]

У меня не вызывает


 
Anatoly Podgoretsky ©   (2006-11-17 12:00) [7]

> StriderMan  (17.11.2006 11:32:05)  [5]

Так ты еще и DB Aware компоненты предлагаешь переписать :-)


 
StriderMan ©   (2006-11-17 12:29) [8]


> Anatoly Podgoretsky ©   (17.11.06 12:00) [7]
> Так ты еще и DB Aware компоненты предлагаешь переписать :-)

теперь-то че переписывать... сделали как сделали...

все же не вижу насущной необходимости


 
ЮЮ ©   (2006-11-17 12:39) [9]


> зачем TControl"у знать о DataSet? о нем могли бы знать TDBXxx-
> контролы.

какая разница, знает о контролах DataSet или DataSource?


Вот и я о том же. А почему они о нем знают. Потому что у них есть DataSource. И они реагирует на его поведение (достаточно простое) так или иначе. А если бы у них был DataSet, то он должен был оповешать их. А их это кого - любых наследников TControl.  Т.е. TControl должен был знать о TDataSet и о его сообщениях.


 
Anatoly Podgoretsky ©   (2006-11-17 12:57) [10]

> StriderMan  (17.11.2006 12:29:08)  [8]

А ведь с DisableControls был только первый попавший пример.


 
StriderMan ©   (2006-11-17 13:10) [11]

насчет DisableControls:

procedure TDataSet.DisableControls;
begin
 if FDisableCount = 0 then
 begin
   FDisableState := FState;
   FEnableEvent := deDataSetChange;
 end;
 Inc(FDisableCount);
end;

как видно, никто никого не оповещает, а только флажок возводится.

а в EnableControls уже генерится событие DataEvent:
procedure TDataSet.EnableControls;
begin
 if FDisableCount <> 0 then
 begin
   Dec(FDisableCount);
   if FDisableCount = 0 then
   begin
     if FDisableState <> FState then DataEvent(deUpdateState, 0);
     if (FDisableState <> dsInactive) and (FState <> dsInactive) then
       DataEvent(FEnableEvent, 0);
   end;
 end;
end;


и в DataEvent кстати, все операции совершаются только с TField, и только в случае флажка NotifyDataSources идет обращение к DataSource.


> оповешать их. А их это кого - любых наследников TControl. Т.е. TControl должен был знать о TDataSet

как видно, напрямую TControl"ы не оповещають и не надо. только через флажок или через TField.


 
ЮЮ ©   (2006-11-17 13:24) [12]

как видно, никто никого не оповещает, а только флажок возводится.
Если оповещать некого, то какая разница кого? :)

procedure TDataSet.DataEvent(Event: TDataEvent; Info: Longint);
...
begin
 NotifyDataSources := not (ControlsDisabled or (State = dsBlockRead));
 case Event of
   deFieldChange:
     begin
       if TField(Info).FieldKind in [fkData, fkInternalCalc] then
         SetModified(True);
       UpdateCalcFields;
     end;
   deFieldListChange:
     FieldList.Updated := False;
   dePropertyChange:
     FieldDefs.Updated := False;
   deCheckBrowseMode:
     CheckNestedBrowseMode;
   deDataSetChange, deDataSetScroll:
     NotifyDetails;
   deLayoutChange:
     begin
       FieldList.Updated := False;
       if ControlsDisabled then
         FEnableEvent := deLayoutChange;
     end;
   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;


Т.е. в выделенном месте потребовалось бы
 TControl(F...Controls[I]).DataEvent(Event, Info);



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.056 c
15-1163005158
Sergey Masloff
2006-11-08 19:59
2006.12.03
Про то как все ругались на 10 тыс зарплаты по письму Думкина


2-1163531474
Troan_81
2006-11-14 22:11
2006.12.03
Как узнать имя окна handle?


15-1163424454
wal
2006-11-13 16:27
2006.12.03
IE + data: url


9-1138364742
Зм1й
2006-01-27 15:25
2006.12.03
Скелетная анимация :(


5-1144519995
Суслик
2006-04-08 22:13
2006.12.03
Регистрация своих расширений IDE