- •Введение
- •Содержание
- •1. Файловые системы
- •История развития
- •Файловые системы, принципы построения
- •Работа с типизированным файлом
- •Недостатки файловых систем
- •Задание
- •Реляционная таблица
- •Определение домена
- •Создание таблиц в среде Microsoft Access
- •Задание
- •Реляционные ключи
- •Связь между таблицами
- •Обеспечение целостности данных
- •Построение схемы данных средствами Microsoft Access
- •Мастер подстановок
- •Задание
- •Концепция ER-модели
- •Задание
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (BCNF)
- •Четвёртая нормальная форма (4NF)
- •Пятая нормальная форма (5NF)
- •Задание
- •Выборка значений из таблиц – SELECT
- •Порядок сортировки – ORDER BY
- •Ограничение набора данных – WHERE
- •Предикат существования EXISTS
- •Агрегатные функции
- •Группировка данных – Group By
- •Псевдонимы столбцов
- •Псевдонимы таблиц
- •Объединение нескольких таблиц
- •Построение запросов в среде Microsoft Access
- •Задание
- •Вставка новой записи – INSERT
- •Редактирование данных – UPDATE
- •Удаление записей – DELETE
- •Задание
- •Основные типы данных SQL-92
- •Язык определения данных – DDL
- •Задание
- •Подготовка отчёта в среде Access
- •Задание
- •3-х уровневая архитектура ANSI-SPARC
- •Создание форм для ввода данных в Microsoft Access
- •Задание
- •Строка соединения ADO
- •Соединение с хранилищем данных, компонент TADOConnection
- •Установка соединения
- •Пример соединения без регистрации пользователя
- •Информирование о БД
- •Задание
- •Базовый класс доступа к данным TDataSet
- •Открытие и закрытие набора данных
- •Обновление набора данных
- •Перемещение по набору данных
- •Создание закладок и переход к закладке
- •Редактирование записей в наборе
- •Фильтрация набора данных
- •Организация поиска данных
- •Взаимодействие с элементами управления данными
- •Задание
- •Поле таблицы – класс TField
- •Классификация полей по функциональному назначению
- •Классификация полей по типу обслуживаемых данных
- •Обращение к отдельному объекту-полю
- •Задание
- •Поля подстановки
- •Вычисляемые поля
- •Организация отношения главная-подчинённая таблица
- •Задание
- •Поля BLOB
- •Задание
- •Источник данных – компонент TDataSource
- •Общие черты компонентов отображения данных
- •Сетка базы данных – компонент TDBGrid
- •Статический текст – компонент TDBText
- •Строка ввода БД – компонент TDBEdit
- •Многострочный текстовый редактор БД – TDBMemo
- •Изображение БД – компонент TDBImage
- •Список БД – TDBListBox
- •Комбинированный список БД – TDBComboBox
- •Флажок БД – TDBCheckBox
- •Радиогруппа БД – TDBRadioGroup
- •Компонент – TDBCtrlGrid
- •Навигатор – TDBNavigator
- •Задание
- •Создание базы данных
- •Удаление базы данных
- •Создание таблиц
- •Пример создания таблиц средствами Transact SQL
- •Создание представлений
- •Задание
- •Определение и использование переменных
- •Операторы управления Transact-SQL
- •Базовые функции Transact-SQL
- •Хранимые процедуры
- •Триггеры
- •Задание
- •Запрос TADOQuery
- •Хранимая процедура TADOStoredProc
- •Транзакции и их изоляция
- •Управление транзакциями и компонент TADOConnection
- •Задание
- •Построение простейшего документа XML
- •Атрибуты
- •Определение документа DTD
- •Задание
100
property OnColExit: TNotifyEvent;
type TDBGridClickEvent = procedure (Column: TColumn) of object;
property OnCellClick: TDBGridClickEvent;
type TDBGridClickEvent = procedure (Column: TColumn) of object;
property OnTitleClick: TDBGridClickEvent;
type |
TMovedEvent |
= |
procedure |
(Sender: |
TObject; FromIndex, |
|
ToIndex: Longint) of |
||
object; |
|
|
|
|
property OnColumnMoved: TMovedEvent;
property OnEditButtonClick: TNotifyEvent;
Статический текст – компонент TDBText
Одна из колонок сетки теряет фокус ввода.
Событие вызывается при щелчке кнопкой мышки в ячейке сетки. Здесь Column – колонка, которой принадлежит данная ячейка.
Щелчок мышкой по заголовку колонки.
Событие вызывается после перемещения колонки из позиции
FromIndex в позицию ToIndex.
Щелчок по кнопке внутри ячейки сетки.
Элемент управления TDBText предназначен только для отображения текущего значения поля и не имеет никаких навыков по редактированию связанных с ним данных. Для подключения компонента к набору данных достаточно выполнить стандартные операции определения источника данных (свойство DataSource) и указать какое именно поле нас интересует (свойство DataField).
Для обеспечения автоподстройки размеров компонента при выводе текста с различным количеством символов установите в true свойство:
property AutoSize: Boolean;
Если текстовые данные настолько необъятны, что ни каким образом не желают помещаться в одну строку, следует перевести в true свойство:
property WordWrap: Boolean;//по умолчанию false
В этом случае элемент управления вспомнит про свои навыки вывода информации в несколько строк.
Строка ввода БД – компонент TDBEdit
Компонент класса TDBEdit представляет собой строку ввода способную не только отображать но и редактировать текущее значение поля.
Многострочный текстовый редактор БД – TDBMemo
Элемент управления TDBMemo спроектирован для работы с текстовыми полями больших размеров или с BLOB полями, специализирующихся на хранении текстовых данных.
Изображение БД – компонент TDBImage
Элемент TDBImage специализируется на обработке графических данных, содержащихся в BLOB полях. Ключевое свойство компонента:
property Picture: TPicture;
Оно инкапсулирует весь функционал для работы с растровой графикой и метафайлами. Для ускорения работы с BLOB полями в элементе управления объявлено свойство:
property AutoDisplay: Boolean;
Задача свойства – включение/отключение автозагрузки данных из поля. Если свойство установлено в false, то для инициализации процесса загрузки изображения в компонент вызывают метод:
procedure LoadPicture;
© 2011 г. Д.Л. Осипов
101
Список БД – TDBListBox
Список TDBListBox отображает текущее значение поля (при условии совпадения его с одним из элементов списка) и позволяет пользователю передавать в поле таблицы одно из заранее подготовленных текстовых значений. Перечень допустимых значений храниться в унаследованном свойстве:
property Items : TStrings;
Заполнение списка строк может осуществляться как в период разработки проекта во встроенном редакторе, так и во время работы приложения.
Комбинированный список БД – TDBComboBox
Комбинированный список выбора TDBComboBox призван решать задачи по выбору значения из списка. Текущее значение связанного с компонентом поля отображается в строке редактирования элемента управления. При желании пользователь может передать в базу данных одно из значений хранящихся в списке компонента. Список значений содержится в свойстве Items, индекс текущего значения – ItemIndex.
Флажок БД – TDBCheckBox
Элемент позволяет пользователю согласиться или отказываться от условия. Хотя в первую очередь флажок нацелен на взаимодействие с полями данных типа Boolean, но его также можно научить передавать в базу текстовые значения. Эта возможность осуществляется с помощью двух свойств:
property |
ValueChecked: String; |
//значение |
на |
включение флажка |
property |
ValueUnchecked: String; |
//значение |
на |
отключение флажка |
по умолчанию содержащими значения “ True ” и “ False” соответственно. Теперь, если в присоединённом к компоненту текстовом поле базы данных обнаруживается значение “True”, то этот факт найдёт своё отражение – в виде “галочки” на поверхности элемента. Значение “False” наоборот – прогонит всех галок. Компонент способен отслеживать одновременно несколько значений, но в этом случае значения должны быть разделены точкой с запятой:
DBCheckBox1.ValueChecked := 'Да;Вкл'; DBCheckBox1. ValueUnchecked := 'Нет;Выкл';
Для управления компонентом из программы потребуются свойства: property Checked: Boolean;
и
type TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed); property State: TCheckBoxState;
Радиогруппа БД – TDBRadioGroup
Компонент реализует группу кнопок выбора, состояние которых определяется значением текущего поля присоединённого набора данных. Одновременно может быть отмечена только одна из кнопок группы. При выборе пользователем кнопки, связанное с ним значение передаётся в базу данных.
Список заголовков кнопок определяется содержимым свойства Items:
property Items: TStrings;
Перечень возможных значений в свою очередь заполняется в свойстве: property Values: TStrings;
Оба свойства доступны во время разработки и во время выполнения программы. Отдельно подчеркну, что количество строк в обоих списках должно быть одинаковым.
Текущее значение связанного поля мы можем выяснить из свойства: property Value: String;
Индекс выбранной кнопки находится в свойстве:
© 2011 г. Д.Л. Осипов
102
property ItemIndex: Integer;
Компонент – TDBCtrlGrid
Компонент TDBCtrlGrid представляет собой набор динамически создаваемых панелей. После открытия связанного с ним набора данных компонент самостоятельно создаёт несколько панелей. Каждая панель ассоциируется с отдельной записью из набора данных. Главная черта TDBCtrlGrid в том, что этот элемент управления может являться владельцем других компонентов предназначенных для работы с БД (см. рис. 16.2).
Рисунок 16.2. — Работа с компонентом TDBCtrlGrid
Порядок следования записей в компоненте TDBCtrlGrid определён свойством: property Orientation: TDBCtrlGridOrientation;
type TDBCtrlGridOrientation = (goVertical, goHorizontal);
По умолчанию свойство принимает значение goVertical, что соответствует последовательности сверху-вниз.
По умолчанию панели компонента размещаются в одном столбце. Для изменения этой традиции требуется настроить свойство:
property ColCount: Integer;
Количество рядов видимых в клиентской области элемента управления определяется свойством:
property RowCount: Integer;
За геометрические размеры панелей отвечают свойства: property PanelHeight: Integer;
property PanelWidth: Integer;
Индекс панели текущей записи хранится в свойстве: property PanelIndex: Integer;
Это же свойство можно применять при необходимости переместиться к панели с определённым номером.
Навигатор – TDBNavigator
Навигатор по набору данных визуально представляет собой группу кнопок (см. рисунок 16.3). Компонент инкапсулирует в себе золотой минимум методов достаточных для создания элементарного приложения работающего с таблицей базы данных. Сразу после
© 2011 г. Д.Л. Осипов
103
подключения к источнику данных при помощи свойства DataSource элемент управления сможет обеспечить перемещение по записям в наборе, вставку, редактирование и удаление записи – для этого достаточно щелкнуть по соответствующей кнопке. По умолчанию компонент содержит 10 кнопок, однако по желанию программиста вполне можно отказаться от показа ненужных. Для этого надо настроить свойство:
property VisibleButtons: TButtonSet; type TButtonSet = set of TNavigateBtn;
type TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh);
Первая запись |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обновить данные |
|
|
||||
|
|
|
|
|
|
|
||||
Предыдущая запись |
|
|
|
|
|
|
|
|||
|
Отменить изменения |
|
||||||||
|
|
|
|
|
|
|
|
|
||
Следующая запись |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|||
|
|
Сохранить |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
Последняя запись |
|
|
|
|
|
|||||
|
|
|
Редактировать запись |
|||||||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
Удалить запись |
|
|
|||
|
|
|
|
|
|
|||||
|
|
|
|
|
Добавить запись |
|
||||
Рисунок 16.3.- Элемент управления TDBNavigator
Как и практически все визуальные элементы управления VCL навигатор обладает элементарным обработчиком события OnClick(). С той только разницей, что он способен различать по какой из кнопок был произведён щелчок.
property OnClick: ENavClick;
type ENavClick = procedure (Sender: TObject; Button: TNavigateBtn) of object;
для этого в событии объявлен дополнительный параметр – Button.
Задание
Используя полученные на занятии знания, разработайте интерфейс для вашего приложения БД. В приложении должны быть обязательно задействованы компоненты
TDataSource, TDBGrid, TDBCtrlGrid, TDBEdit, TDBListBox (или TDBComboBox), TDBCheckBox, TDBRadioGroup и другие компоненты на ваш выбор.
© 2011 г. Д.Л. Осипов
