
- •Целый тип данных
- •Вещественный тип данных
- •Структура программы. Операторы языка
- •Ввод-вывод данных
- •Условный оператор и оператор выбора
- •Перечисляемый тип. Ограниченный тип. Множества
- •Иерархические записи
- •Операторы цикла Оператор цикла с параметром. Операторы цикла итерационного типа
- •Основные принципы ооп
- •Класс, объект
- •Конструкторы и деструкторы
- •Наследование
- •Полиморфизм
- •Визуальное программирование. Среда Делфи
- •Структура проекта. Модули
- •Компоненты. Его свойства и методы
- •Компиляция и сообщение компилятору
- •Линейный алгоритм в среде Делфи
- •20Иерархия классов в Делфи
- •Массивы
- •Создание и работа со списками
- •Управляющие компоненты
- •Переключатели зависимые и независимые
- •Контейнеры
- •Контейнеры. Формы модальные. Диалоговые окна
- •Классы exception
- •Создание главного меню
- •Типизированные файлы
- •Инструменты TabControl PageControl ToolBar CoolBar StatusBar
- •Динамическая структура
- •Форматы графических файлов
- •Основные типы бд. Создание бд
- •Компоненты для создания приложений бд
- •Создание вычисляемых полей и полей выбора
- •Навигационный способ доступа к данным
- •Способы фильтрации
- •Создание и обработка набора данных нескольких таблиц
- •Конструктор отчетов
Навигационный способ доступа к данным
Компонент 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: