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

Вниз

Компонент для работы с базами данных DataSet или DataSource?   Найти похожие ветки 

 
Rep ©   (2005-05-17 14:19) [0]

Хочу попробовать написать визуальный компонент для работы с базами. И вот  столкнулся с выбором типа свойства источника данных.
Везде в компонентах используется TDataSource для связи визуальных компонентов с не визуальными.
А зачем? Почему нельзя использовать напрямую TDataSet?
Чем это может быть чревато? ведь в конечном счете все равно придется писать:
DataSource.DataSet.....


 
Anatoly Podgoretsky ©   (2005-05-17 14:30) [1]

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


 
Rep ©   (2005-05-17 14:52) [2]


> Anatoly Podgoretsky ©   (17.05.05 14:30) [1]

Я не прочь принять решения борланда. но я хочу понять зачем использовать DataSource, если к тем же полям я могу обращатся как через DataSet


 
имя   (2005-05-17 16:55) [3]

Удалено модератором
Примечание: Оффтопик. Создайте свою ветку.


 
имя   (2005-05-17 16:55) [4]

Удалено модератором
Примечание: Дубль.


 
Юрий Зотов ©   (2005-05-17 21:40) [5]

> Rep ©   (17.05.05 14:52) [2]

> к тем же полям я могу обращатся как через DataSet

Не можете. Вот, допустим, поле изменилось и все отображающие его контролы должны обновиться. А как они об этом узнают?

Посмотрите в исходниках VCL, как в DB-контролах используется встроенный в них объект TDataLink - сразу все увидите сами.


 
jack128 ©   (2005-05-17 22:59) [6]

Юрий Зотов ©   (17.05.05 21:40) [5]
как в DB-контролах используется встроенный в них объект TDataLink - сразу все увидите сами.

а почему дата линки связываются с datasource"ами, а не с DataSet"ом ?? Что я не вижу никакого особого функционала у TDataSource"a.. Нафиг сделано это промежуточное звено??


 
Ученик   (2005-05-17 23:07) [7]

>jack128 ©   (17.05.05 22:59) [6]
Наверно, для простоты подключения различных TDataSet-ов


 
Юрий Зотов ©   (2005-05-18 09:30) [8]

> jack128 ©   (17.05.05 22:59) [6]

> а почему дата линки связываются с datasource"ами, а не с
> DataSet"ом ?? Что я не вижу никакого особого функционала у
> TDataSource"a.. Нафиг сделано это промежуточное звено??

Это не "нафиг", Жень, это еще одно проявление величия и мудрости дядьки Борланда. Сделано было еще в Delphi 1, когда не было компонентов прямого доступа к БД и все работали через BDE. Но если бы они этого не сделали, то все последующие разработчики таких компонентов были бы вынуждены писать существенную часть кода методом Copy-Paste (в части работы с контролами).

Задача DataSet"а - работа с БД.
Задача DataSourc"а - работа с контролами.

Две принципиально разные задачи - два совершенно разных компонента. Это один из общих принципов построения VCL. Который, вместе с другими принципами и позволяет ей быть вечно расширяемой, а не вечно переписываемой.

Наверное, то же самое можно было реализовать и иначе. Но они выбрали именно такое решение - их право. И, как показали последующие 10 лет, решение это себя вполне оправдывает.


 
jack128 ©   (2005-05-18 19:46) [9]

Юрий Зотов ©   (18.05.05 9:30) [8]
Задача DataSet"а - работа с БД.
Задача DataSourc"а - работа с контролами


а что тогда делает DataLink то ??? В том то и дело, что что есть две задачи: работа с данными(эту задачу решает DataSet) и работа по нотификации страждущих об изменнении данных(страждущих - это не только контролы, но и например подчиненные датасеты) - этим занимается DataLink. Где здесь место DataSource"у то??
А места этого нету. Знаешь в каком контексте чаще всего встречается DataSources в методах DataSet"a?

   for I := FDataSources.Count - 1 downto 0 do
     with TDataSource(FDataSources[I]) do
       for J := FDataLinks.Count - 1 downto 0 do

то есть datasource - это просто список DataLink"ов - и не больше..


 
Юрий Зотов ©   (2005-05-18 22:50) [10]

> jack128 ©   (18.05.05 19:46) [9]

> а что тогда делает DataLink то ???

Ты же сам сказал - "работа по нотификации страждущих об изменнении данных (страждущих - это не только контролы, но и например подчиненные датасеты) - этим занимается DataLink".

> Где здесь место DataSource"у то?
> А места этого нету. Знаешь в каком контексте чаще всего
> встречается DataSources в методах DataSet"a?
> то есть datasource - это просто список DataLink"ов - и не
> больше..

Знаю, Жень. Но место для DataSourcе все же есть. Как раз потому, что ты прав - по сути, это именно список DataLink"ов. И поместить его в контрол нельзя, в контроле нужен только один элемент этого списка, а если поместить его в DataSet, то придем ровно к той же ситуации, о которой уже говорилось - все разработчики совершенно разных DataSet"ов будут вынуждены писать какую-то часть кода методом Copy-Paste.

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

Ответ напрашивается - этот список DataLink"ов надо выполнить внутри невизуального компонента, который можно положить на форму и настроить в ИО. Борланд так и сделала. И назвала этот компонент TDataSource.

Имела полное право, согласись?
:о)

P.S.
У тебя никогда не возникало желания написать компонентскую оболочку вокруг TSringList? Просто контейнер набора строк, единственный смысл которого в том, что с ним можно работать в ИО?

У меня возникало. И у других тоже, знаю таких. Ситуация с DataSource похожа, но заметно сложнее - требуется простановка ссылок и из него, и на него. Эта простановка должна быть именно в ИО, поскольку при проектировании форм состав контролов, привязанных к DataSource меняется довольно часто, и не в коде, а мышкой. Согласись, что менять что-то мышкой и быть вынужденным тут же лезть в код и что-то править еще и там - это нонсенс. Поэтому в DBControl"ах и появилось свойство DataSource - а куда оно еще может ссылаться, как не компонент? Только на компонент. А чем же еще может быть этот компонент, как не оболочкой вокруг списка DataLink"ов?

Нет, Жень, велик и мудр дядька Борланд.


 
jack128 ©   (2005-05-19 17:28) [11]

Юрий Зотов ©   (18.05.05 22:50) [10]
то придем ровно к той же ситуации, о которой уже говорилось - все разработчики совершенно разных DataSet"ов будут вынуждены писать какую-то часть кода методом Copy-Paste.


Это какую??? Нету такой части и быть не может. DataSource - это вообще не класс, это можно сказать запись(ну фигурально выражаясь). Чистые данные без кода.

Борланды бы написали

TDataSet = class
 FDataLinks: array of TList
end;
Юрий Зотов ©   (18.05.05 22:50) [10]
Ситуация с DataSource похожа

Ничуть. В отличии от StringList"а DataSet сам по себе является компонентом и мы вполне могли бы ссылаться на него из DBControl"ов  напрямую(а не через DataSource как сейчас) в дезигн тайм.

Юрий Зотов ©   (18.05.05 22:50) [10]
Нет, Жень, велик и мудр дядька Борланд.

Не спорю, но все мы люди, в том числе Борланды ;)


 
jack128 ©   (2005-05-19 17:29) [12]

jack128 ©   (19.05.05 17:28) [11]
Борланды бы написали

TDataSet = class
FDataLinks: array of TList
end;


Это не читать..


 
Юрий Зотов ©   (2005-05-20 12:23) [13]

> jack128 ©   (19.05.05 17:29) [12]

> Это не читать..

Жень, давай остальное тоже читать не будем, ладно?

Загляни в VCL и перечитай [7] и [8]. Неохота снова воду в ступе не толочь.



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

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

Наверх




Память: 0.51 MB
Время: 0.058 c
8-1120935016
murtix
2005-07-09 22:50
2005.12.11
Gdi+ и Delphi 2005


2-1132235159
JJohn
2005-11-17 16:45
2005.12.11
PByte..... Help!


14-1132576325
Дмитрий_Б
2005-11-21 15:32
2005.12.11
Хорошее агенство недвижимости.


14-1132235339
Eugene_T
2005-11-17 16:48
2005.12.11
Установка Delphi 2005 Architect


2-1132759017
Fast2
2005-11-23 18:16
2005.12.11
Как по дате определить день недели?