Особенности набора данных Table 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Особенности набора данных Table



 Компонент Table представляет собой набор данных, который в текущий момент времени может быть связан только с одной таблицей БД. Этот набор данных формируется на базе навигационного способа доступа к данный, поэтому компонент Table рекомендуется использовать для локальных БД, таких как dBase или Paradox. При работе с удаленными БД следует использовать компонент Query.

 Связь между таблицей и компонентом Table устанавливается через его свойство TableName типа TFileName, которое задает имя таблицы (и имя файла с данными таблицы). При задании свойства TableName указывается имя файла и расширение имени файла.

 На этапе разработки приложения имена всех таблиц доступны в раскрывающемся списке Инспектора объектов. В этот список попадают таблицы, файлы которых расположены в каталоге, указанном свойством DatabaseName.

 При смене имени таблицы на этапе проектирования приложения свойству Active набора данных автоматически устанавливается значение False. При задании имени таблицы программным способом набор данных предварительно необходимо закрыть, установив его свойству Active значение False. В противном случае генерируется исключительная ситуация.

 Свойство TаbleТуре типа TTtableType определяет тип таблицы. Для локальных таблиц это свойство может принимать следующие значения:

 1. ttoefault — тип таблицы автоматически определяется по расширению файла;

 2. ttParadox — таблица Paradox;

 3. ttDBase — таблица dBASE;

 4. ttFoxPro — таблица FoxPro;

 5. ttASCII — текстовый файл, содержащий данные в табличном виде (таблица ASCII).

 

 По умолчанию в состав набора данных Table попадают все записи связанной с ним таблицы. Для отбора записей, удовлетворяющих определенным условиям, используются фильтры.

 Delphi через BDE автоматически поддерживает многопользовательский доступ к локальным таблицам, при этом по умолчанию все пользовательские приложения имеют равные права и могут редактировать содержащиеся в таблицах данные. Чтобы запретить пользователям изменять содержание записей, можно использовать свойство Readonly типа Boolean. По умолчанию оно имеет значение False, что предоставляет пользователю право на модификацию записей.

 В наборе данных Table возможно указание текущего индекса, требуемого для выполнения операций: сортировки записей, поиска записей, установки связей между таблицами.

 Текущий индекс устанавливается с помощью свойства indexName или indexFieldNames типа string. На этапе разработки приложения текущий индекс выбирается из списка индексов, заданных при создании таблицы. Все возможные значения свойств indexName и indexFieldNames содержатся в раскрываю-щихся списках, доступных через Инспектор объектов. Оба свойства во многом схожи, и их использование практически одинаково. Значением свойства indexName является имя индекса, заданное при создании таблицы, а значением свойства IndexFieldNames является имя поля, для которого был создан индекс. Если индекс состоит из нескольких полей, то для свойства indexName по-прежнему задается имя этого индекса, а для свойства indexFieldNames через точку с запятой перечисляются имена полей, входящие в этот индекс.

 Для таблиц Paradox сделать текущим индексом ключ (главный индекс) можно только с помощью свойства IndexFieldNames, перечислив ключевые поля таблицы, т. к. ключ не имеет имени и поэтому недоступен через свойство indexName.

Замечание

 Свойства indexName и IndexFieldNames взаимозависимы. При установке значения одного из них другое автоматически очищается.

 Индекс, устанавливаемый текущим, должен существовать. Если индекс, задаваемый как значение свойства indexName или IndexFieldNames, для таблицы не существует, то возникает исключительная ситуация.

 При смене таблицы, с которой ассоциирован компонент Table, значения свойств IndexName и IndexFieldNames не изменяются автоматически, поэтому программист должен самостоятельно установить нужные значения.

 Процедура Addlndex (const Name, Fields: String; Options: TIndexOptions) до-бавляет к таблице индекс, имя которого задано параметром Name. Входящие в состав индекса поля указываются в параметре Fields; если индекс состоит из нескольких полей, то они разделяются точкой с запятой. Указывать можно только поля, которые входят в структуру таблицы, в противном случае генерируется исключительная ситуация, а индекс не создается. Параметр options содержит параметры индекса. Он имеет множественный тип и может принимать комбинации следующих значений:

 1. ixPrimary — первичный индекс;

 2. ixunique — уникальный индекс, для которого не допускается повторение значений полей в его составе;

 3. ixDescending — индекс определяет сортировку в порядке убывания значений, по умолчанию строится индекс, определяющий сортировку по возрастанию;

 4. ixExpression — индекс создается на основе выражения (только для таблиц dBase);

 5. ixcaseinsensitive — индекс определяет сортировку независимо от регистра букв;

 6. ixNonMaintained — индекс автоматически не модифицируется, если таблица открыта.

 Перед удалением индекса таблица должна быть переведена в режим монопольного.

 

 Свойство count типа integer содержит количество индексов и доступно для чтения. Управление количеством индексов осуществляется косвенно, т. е. через другие свойства и методы.

 Свойство Items [Index: Integer] типа TIndexDef представляет собой список, содержащий информацию обо всех индексах таблицы. Переменная index указывает номер индекса в списке, отсчет начинается с нуля. Тип TindexDef (не путать с классом TindexDefs) является классом и, в свою очередь, также имеет свойства, основными из которых являются Name, Fields И Options.

 Свойство Name типа string содержит имя индекса. Для индексов, построенных на основе выражений (таблицы dBase), и для главного индекса таблиц Paradox вместо названия возвращается пустая строка.

 Свойство Fields типа string содержит названия полей, по которым построен индекс. Если в индексе используется несколько полей, то их названия разделяются точкой с запятой.

 Свойство options типа TindexOption содержит параметры индекса, заданные при его создании.

 Для добавления и удаления индексов используются методы Add и clear. Процедура Add (const Name, Fields: String; Options: TIndexOptions) добавляет новый индекс. Параметры этой процедуры не отличаются от параметров метода Addindex набора данных Table, однако для метода Add не требуется перевод таблицы в режим монопольного доступа, что делает его использование более удобным.

 Процедура clear удаляет все индексы, содержащиеся в списке индексов.

 Функция IndexOf (const AName: String): Integer осуществляет поиск индекса по имени, заданному параметром AName. В качестве результата возвращается номер индекса в свойстве items. В случае неудачного поиска возвращается значение -1.

 Функция FindindexForFieids (const Fields: String): TIndexDef осуществляет поиск индекса по списку полей, заданному параметром Fields. В случае успешного поиска функция возвращает информацию об индексе, если же индекс отсутствует, то генерируется исключительная ситуация.

 При запуске приложения информация об индексах таблицы считывается с диска из соответствующих индексных файлов. При динамическом, т. е. в процессе выполнения приложения, изменении индексов содержимое индексных файлов остается прежним. При необходимости программист должен предусмотреть сохранение новой информации на диске для ее последующего применения. Для этого можно использовать свойство storeDefs типа Boolean, которое указывает, нужно ли сохранять информацию об индексах на диске. При любых изменениях в индексах этому свойству нужно установить значение True, и тогда информация об индексах будет автоматически сохранена на диске. Если изменения в индексах сохранять не нужно, то достаточно установить свойству storeDefs значение False, и изменения в индексах будут действовать только при выполнении приложения.



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 40; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.146.255.127 (0.008 с.)