Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

Зачем придумали 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.42 c
8-1145908539
Jrek
2006-04-24 23:55
2006.12.03
Соунд карточки


15-1163713710
dreamse
2006-11-17 00:48
2006.12.03
SQL запрос


2-1163495203
MishaLukash
2006-11-14 12:06
2006.12.03
DBGrid.Columns.Width не отображает поле во всю длинну


15-1163658451
AntiUser
2006-11-16 09:27
2006.12.03
Что вы можете сказать о такой вакансии?


2-1163515415
Ruffian
2006-11-14 17:43
2006.12.03
Хелп плиз с работой с файлами...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский