Delphi 4 новые возможности и некоторые примеры их применения


             

Поддержка вложенных таблиц


Компонент TDBGrid теперь может отображать вложенные таблицы. Для иллюстрации этой возможности воспольуемся таблицами customer.db, orders.db и items.db, поставляемыми вместе с Delphi. Поместим на форму три компонента TTable, три компонента TDataSourse, один компонент TClientDataSet и один компонент TProvider. Установим следующие свойства этих компонентов:

КомпонентСвойствоЗначение
DBGrid1DataSourceDataSource3
DBNavigator1DataSourceDataSource3
Table1DatabaseName 'DBDEMOS'
TableName'customer.db'
ActiveTrue
DataSource1 DataSetTable1
Table2DatabaseName 'DBDEMOS'
TableName 'orders.db'
IndexFieldNames 'CustNo'
MasterFields 'CustNo'
MasterSourceDataSource1
ActiveTrue
DataSource2DataSet Table2
Table3DatabaseName 'DBDEMOS'
TableName'items.db'
IndexFieldNames'OrderNo'
MasterFields'OrderNo'
MasterSourceDataSource2
ActiveTrue
Provider1DataSetTable1
ClientDataSet1ProviderName 'Provider1'
ActiveTrue
DataSource3DataSet ClientDataSet1

Рис. 15 Главная форма приложения, использующего вложенные таблицы.

Сами таблицы формата Paradox, естественно, не поддерживают поля, содержащие вложенные таблицы, но такие поля поддерживает компонент TClientDataSet со страницы MIDAS палитры компонентов. Связав его с компонентом Table1 посредством компонента Provider1, мы получим набор данных, содержащий поле Table2 типа TDataSetField, а внутри вложенной таблицы - поле Table3 того же типа:

Рис. 16 Вложенные таблицы на этапе выполнения.

Такое представление данных даже в случае использования настольных СУБД весьма удобно просто потому, что оно решает общеизвестную проблему нехватки места на форме при наличии нескольких связанных таблиц. Единственное, о чем при этом следует позаботиться, это вызов метода ApplyUpdates компонента TClientDataSet (например, в обработчике события, связанного с выбором какого-либо пункта меню или с нажатием на кнопку): ClientDataSet1.ApplyUpdates(-1);

Если не использовать этот метод, данные будут сохраняться только в кэше, которым фактически и является компонент TClientDataSet, а не в самих таблицах.




Содержание  Назад  Вперед