Лекция 5.6. Навигационный способ доступа к БД
Компонент TTable представляет собой НД, который в некоторый момент времени может быть связан только с одной таблицей БД. Набор данных, возвращаемый компонентом, основан на навигационном способе доступа к данным.
Его рекомендуется использовать только для локальных БД, таких как Paradox и dBase. При работе с удаленными БД лучше использовать компонент TQuery, который будет рассмотрен в следующей лекции.Рассмотрим основные свойства и методы отличающие класс TTable от, рассмотренного ранее, предка. Наиболее важными являются свойства необходимые для подключения компонента к данным т.к. они указываются всегда:
· DatabaseName: String – путь к БД или псевдоним;
· TableName: TFileName – имя таблицы.
После установки обязательных свойств можно выполнить другие настройки или включить НД через свойство Active или методом Open.
· DefaultIndex: Boolean – управляет включением сортировки по текущему индексу;
· Exclusive: Boolean – включает монопольный доступ к таблице БД;
· Exists: Boolean – указывает, существует ли таблица БД;
· IndexDefs: TIndexDefs – содержит информацию об индексах таблицы;
· IndexFieldCount: Integer – количество полей текущего индекса;
· IndexFieldNames: String – список полей, образующих текущий индекс таблицы;
· IndexFields: [Index: Integer]: TField – открывает доступ к полям текущего индекса;
· IndexFiles: TStrings - содержит список имен индексных файлов для таблицы dBASE;
· IndexName: String – имя вторичного индекса таблицы;
· KeyExclusive: Boolean – если содержит false, граничные точки диапазона при фильтрации по ключам методом SetRange входят в поисковый диапазон, в противном случае - не входят;
· KeyFieldCount: Integer - указывает, сколько полей будут участвовать при поиске по части индекса. Если 0 – первое поле, 1 – первое и второе и т.д.
· MasterFields: String – определяет поля связи главной таблицы в связи главный- детальный;
· MasterSource: TDataSource - определяет источник данных главной таблицы в связи главный- детальный.
· ReadOnly: Boolean – включает (true) или выключает (false) режим «только для чтения» данных;.
· TableType: TTableType = (ttParadox, ttDBase, ttFoxPro, ttASCII) – определяет тип таблицы.
Основные методы класса TTable:
· procedure AddIndex (const Name, Fields: String; Options: IndexOptions) - создает новый индекс с указанным именем (Name) и списком полей которые входят в индекс (Fields). Параметр Options определяет параметры индекса: первичный индекс (ixPrimary), уникальный (ixUnique), индекс по убыванию (ixDescending), чувствительный к регистру букв (ixCaseInsensitive), определенный по индексному выражению (ixExpression), не обновляемый автоматически при открытии таблицы (ixNonMaintained).
· procedure ApplyRange - включает фильтрацию записей по ключевым полям;
· procedure CancelRange - отменяет фильтрацию записей по ключевым полям;
· procedure CreateTable - создает новую таблицу по информации, хранящейся в свойствах FieldDefs, Fields.
· procedure DeleteIndex (const Name: String) - уничтожает индекс с именем Name.
· procedure EditKey – переводит в режим редактирования (dsSetKey) буфер поиска;
· procedure EditRangeEnd - позволяет изменить конечное значение диапазона фильтрации по индексным полям;
· procedure EditRangeStart - позволяет изменить начальное значение диапазона фильтрации по индексным полям;
· procedure EmptyTable - удаляет все записи из таблицы;
· function FindKey (const KeyValues: array of const): Boolean - отыскивает запись по указанным значениям KeyValues ключевых полей и возвращает True в случае успеха;
· procedure FindNearest (const KeyValues: array of const) - перемещает курсор на запись, наиболее полно удовлетворяющую указанным значениям KeyValues ключевых полей;
· procedure GetProviderAttributes (List : TList) - получает из BDE и помещает в список List языковый драйвер, маршрут доступа и имя таблицы;
· function GotoKey: Boolean – ищет запись, ключевые поля которой соответствуют значениям, связанным с предыдущими вызовами StartKey или EditKey.
В случае успеха перемещает курсор на найденную запись и возвращает true;· procedure GotoNearest - перемещает курсор на запись, наиболее полно удовлетворяющую значениям ключей, установленных методами SetKey или EditKey.
· procedure RenameTable (const NewTableName: String) – переименовывает файл связанный с текущим НД;
· procedure SetKey - переводит таблицу в режим dsSetKey и очищает буфер ключей. С помощью FieldByName программа должна установить новый набор ключей и с помощью ApplayRange отфильтровать НД по индексным ключам;
· procedure SetRange (const StartValues, EndValues: array of const) - переводит таблицу в режим dsSetKey, устанавливает новый набор начальных StartValues и конечных EndValues значений буфера ключей и фильтрует НД по индексным ключам;
· procedure SetRangeEnd - переводит таблицу в режим dsSetKey и очищает буфер конечных значений ключей. С помощью FieldByName программа должна установить новый набор ключей и с помощью ApplayRange отфильтровать НД по индексным ключам;
· procedure SetRangeStart - переводит таблицу в режим dsSetKey и очищает буфер начальных значений ключей. С помощью FieldByName программа должна установить новый набор ключей и с помощью ApplayRange отфильтровать НД по индексным ключам;
· procedure UnlockTable (LockType: TLockType) - отменяет блокировку таблицы (см. LockTable).
Как видно из рассмотренных свойств и методов большинство из них используются для работы с индексами таблицы. Текущий индекс используется для сортировки, поиска записей и установки связей между таблицами. Понятие индекса тесно связано с понятием ключа в теории БД, в связи с этим они могут быть простыми и сложными, уникальными и неуникальными и т.д. Индексов у одной таблицы может быть множество, они могут обладать различными свойствами и состоять из одного или более полей.
Использование индексов
Свойство IndexDefs компонента TTable содержит ссылку на объект класса TIndexDefs. С помощью свойств и методов этого класса можно получить информацию об индексах таблицы.
В частности, свойство Count возвращает количество индексов, а свойство Items[Index: Integer]: TIndexDef - открывает доступ к набору объектов типа TIndexDef, каждый из которых содержит информацию о конкретном индексе. Index должен принадлежать диапазону 0...Count - 1.Основные свойства класса TIndexDef:
· CaselnsFields: String – содержит перечень полей, которые будут учитывать разницу в высоте букв.
· DescFields: String – содержит перечень полей, в которых значения сортируются в нисходящем порядке;
· Expression: String - содержит индексное выражение.
· Fields: String – содержит список полей, по которым построен индекс. Поля в строке разделены точкой с запятой.
· Name: String – содержит имя индекса.
· Options: TIndexOptions - определяет характеристики индекса: ixPrimary - первичный индекс; ixUnique -уникальный индекс; ixDescending - сортировка по нисходящему значению; ixNonMaintained - индекс не обновляется автоматически в момент открытия таблицы; ixCaselnsensitive - учитывается высота букв в строковых полях.
Основные методы класса TIndexDefs:
· procedure Add(const Name, Fields: :String; Options: TIndexOptions) - cоздает новый объект TIndexDef и помещает его в коллекцию TIndexDefs. Параметры Name, Fields и Options используются для установки значений аналогичных свойств объекта класса TIndexDef;
· procedure Clear – очищает список Items;
· procedure GetlndexNames(List: TStrings) - возвращает в параметр List список имен индексов;
· procedure Update - обновляет элементы коллекции.
Рассмотрим код получения имен всех индексов таблицы БД:
ListBoxl.Clear;
Tablel.IndexDefs.Update;
for i:= 0 to Tablel,IndexDefs.Count - 1 do
ListBoxl.Items.Add(Tablel.IndexDefs[i].Name);
Перед считыванием значения свойства Name необходимо выполнить метод IndexDefs. Update для обновления информации обо всех имеющихся индексах.
Отметим, что для таблиц Paradox первичный индекс не имеет имени и для него в свойстве Name возвращается пустая строка.
Вопросы для самоконтроля
1. Что подразумевается под навигационным доступом к БД?
2. В чем заключается основное отличие класса TTable от класса TDataSet?
3. Как компонент класса TTable подключается к таблице БД?
4. Какие методы позволяют выполнять создание, удаление и переименование таблиц БД?
5. Как можно выполнить поиск по НД класса TTable?
6. Какие свойства позволяют использовать индексы?
7. Что определяет тип TIndexOptions, какие значения он может принимать?
Еще по теме Лекция 5.6. Навигационный способ доступа к БД:
- 3.4. Структура корпоративного права
- 61. СПОСОБЫ ОБЕСПЕЧЕНИЯ ОБЯЗАТЕЛЬСТВ
- Конфедерация и иные формы межгосударственных объединений (союзы, сообщества, содружества, ассоциации)
- 57 Понятие системы законодательства. Основные свойства российской системы законодательства: многообразие, государственная упорядоченность, иерархичность нормативных юридических актов.
- 59 Понятие систематизации нормативных юридических актов. Способы систематизации юридических актов: обработка (сбор актов), перегруппировка (создание сборников), изложение (объединение).
- 2. Роль фіскальної політики в державному регулюванні.