Компонент таблицы
Компонент таблицы обеспечивает доступ к таблице базы данных целиком, создавая набор данных, структура полей которого полностью повторяет таблицу БД. За счет этого компонент прост в настройке и обладает многими дополнительными функциями, которые обеспечивают применение табличных индексов.
Но в практике программирования работа с таблицами целиком используется не так часто. А при работе с серверами баз данных промежуточное ПО, используемых технологий доступа к данным, все равно транслирует запрос на получение табличного набора данных в простейший запрос SQL, например:
SELECT * FROM Orders
В такой ситуации применение табличных компонентов становится менее эффективным, чем использование запросов.
После соединения с источником данных (процесс подключения для каждой технологии подробно рассматривается в части IV) необходимо задать имя таблицы в свойстве
property TableName: String;
Иногда в свойстве TаblеТуре дополнительно задается тип таблицы.
Если соединение с источником данных настроено правильно, имя таблицы можно выбрать из выпадающего списка свойства TableName.
Преимуществом табличного компонента является использование индексов, которые ускоряют работу с таблицей. Все индексы, созданные в базе данных для таблицы, автоматически загружаются в компонент. Их параметры доступны через свойство
property IndexDefs: TIndexDefs;
Подробно класс TIndexDefs рассматривается ниже в этой главе.
При работе с компонентом разработчик имеет возможность управлять индексами.
Существующий индекс можно выбрать в Инспекторе объектов в списке свойств
property IndexName: String;
или использовать свойство
property IndexFieldNames: String;
в котором можно задать произвольное сочетание имен индексированных полей таблицы. Имена полей разделяются символом точкой с запятой. Таким образом, при помощи свойства IndexFieldNames можно создавать составные индексы.
Свойства IndexName и IndexFieldNames нельзя использовать одновременно.
Число полей, используемых в текущем индексе табличного компонента, возвращает свойство
property IndexFieldCcunt: Integer;
А свойство
property IndexFields: [Index: Integer]: TField;
представляет собой индексированный список полей, входящих в текущий индекс:
for i := 0 to MyTable.IndexFieldCount — 1 do MyTable.IndexFields[i].Enabled := False;
Для выполнения операций с таблицами и индексами целиком в табличных компонентах реализовано несколько методов.
Метод
procedure CreateTable;
создает новую таблицу в базе данных, используя заданное имя и описание полей, и индексов из свойств TFieldDefs и TindexDefs. Если таблица с таким именем уже имеется в базе данных, то она будет уничтожена и создана заново с новой структурой и данными.
Метод
procedure EmptyTable;
удаляет из набора данных и таблицы базы данных все записи.
Метод
procedure DeleteTable;
уничтожает таблицу базы данных, связанную с компонентом. Набор данных должен быть закрыт.
Метод
type
TIndexOption = (ixPrimary, ixUnique, ixDescending, ixCaselnsensitive,
ixExpression, ixNonMaintained);
TIndexOptions = set of TIndexOption;
procedure Addlndex(const Name, Fields: String; Options: TIndexOptions, const DescFields: String='');
добавляет к таблице БД новый индекс. Параметр Name задает имя индекса. В параметре Fields через точку с запятой определяются имена полей, входящих в индекс. Параметр DescFields задает описание индекса из констант, объявленных в типе TIndexOption.
Метод
procedure Deletelndex(const Name: string);
уничтожает индекс.
Кроме этого, табличные компоненты содержат свойства и методы, описываемые в гл. 14.