- •Технології проектування баз даних в delphi
- •6.051001 - Метрологія та інформаційно-вимірювальні технології
- •Технології проектування баз даних в delphi
- •6.051001 - Метрологія та інформаційно-вимірювальні технології
- •1Введение
- •2Введение в базы данных
- •2.1Типы субд
- •2.2Стандарт odbc
- •2.3Технологии взаимодействия delphi с бд
- •2.3.1Особенности технологии bde
- •2.3.2Особенности технологии ado
- •2.4Таблицы бд и связи между ними
- •2.5Первичные ключи и индексы
- •2.6Демонстрационная бд "поставщик книг"
- •3Использование odbc для подключения источника данных. Псевдонимы бд
- •3.1Внешний и внутренний псевдонимы бд
- •3.1.1Создание внешнего псевдонима
- •3.1.2Проверка работоспособности внешнего псевдонима в среде Delphi
- •3.2Внутренний псевдоним бд
- •3.2.1Назначение внутреннего псевдонима бд
- •3.2.2Создание внутреннего псевдонима
- •3.2.3Преимущества использования внутреннего псевдонима и проблемы перехода на другие субд
- •4Создание проекта с бд в технологии bde
- •4.1Особенности использования bde для соединения с источником данных
- •4.2Структура проекта с бд и визуальными компонентами
- •4.3Активизация проекта
- •4.4.4Компоненты tdbGrid
- •4.5Модуль данных
- •4.5.1Создание модуля данных tDataModule
- •4.5.2Связь модуля главного окна с модулем данных
- •4.5.3Создание компонента tDatabase
- •4.5.4Создание компонента tTable
- •4.5.5Создание компонента tDataSource
- •4.5.6Связь модуля главного окна с модулем данных
- •4.5.7Связь сетки tdbGrid и навигатора dbNavigator c источником данных tDataSource
- •4.5.8Связь главный-детальный между наборами данных
- •4.5.9Задание реляционной связи между наборами данных
- •4.5.10Активизация наборов данных
- •4.5.11Недостатки полученных решений и пути их устранения
- •4.6Объекты-столбцы сетки dbGrid
- •4.6.1Создание объектов-столбцов
- •4.6.2Редактирование объекта-столбца
- •4.7Объекты-поля наборов данных
- •4.7.1Назначение объектов-полей
- •4.7.2Создание объектов-полей
- •4.7.3Присоединение к наборам данных новых полей
- •4.7.4Присоединение полей из других таблиц. Подстановочные поля
- •4.7.5Вычисляемые поля
- •4.8Обработчики событий компонент работы с бд
- •4.8.1Обработчики событий OnGetText полей нд и компонента визуализации данных tdbGrid
- •4.8.2Установка системных переменных в обработчике событя OnCreate
- •4.9Бизнес-правила и обработчики событий компонент работы с бд
- •5Sql запросы к бд
- •5.1Компонент tQuery
- •5.2Создание компонента tQuery
- •5.3Использования компонента tQuery
- •5.3.1Свойство sql компонента tQuery
- •5.3.2Методы Open и ExecSql
- •5.3.3Схема программного формирования sql-запроса
- •5.3.4Параметрические запросы
- •5.3.5Параметрические запросы и свойство DataSource компонента tQuery
- •5.3.6Связь главный-детальный с компонентом tQuery в качестве детального набора данных
- •5.4Доступ к полям запроса
- •5.4.1Обращение к значению поля при помощи свойств объектов-полей Value и AsXxxx
- •5.4.2Обращение к значению поля при помощи свойств набора данных Fields и FieldValues
- •5.4.3Обращение к значению поля при помощи функции набора данных FieldByName
- •5.5Программный доступ к данным запроса
- •5.5.1Общая схема программного доступа к данным запроса
- •5.5.2Последовательная навигация по записям
- •5.6Обзор событий компонента tQuery
- •6Хранимые процедуры и триггеры
- •6.1Хранимые процедуры
- •6.2Создание хранимых процедур
- •6.3Вызов хранимых процедур
- •6.4Триггеры
- •7Наборы данных
- •7.1Обзор событий класса tdbDataSet
- •7.1.1Реализация каскадных изменений и бизнес-правил
- •7.1.2Другие события
- •8Технология ado
- •8.1Основные особенности технологии ado
- •8.2Реализация технологии ado в Delphi
- •8.3Создание проекта с бд в технологии ado. Установка связи с бд
- •8.3.1Создание модуля данных
- •8.3.2Начало настройки связи
- •8.3.3Выбор провайдера
- •8.3.4Настройка провайдера
- •8.3.5Настройка провайдера Microsoft Jet 4.0 ole db Provider
- •8.3.6Настройка провайдера Microsoft ole db Provider for odbc Drivers
- •8.3.7Завершение настройки связи
- •8.3.8Настройка оставшихся компонент модуля данных
- •8.4Особенности использования компонентов ado
- •8.4.1Базовые объекты ado
- •8.4.2Объект Recordset
- •8.4.3Объект Command
- •8.4.8Связной компонент tadoConnection
- •8.4.9Компонент tadoCommand
- •8.5Свойства, методы и события ado компонентов-наборов
- •8.5.1Общие свойства с bde-компонентами
- •8.5.2Специфические свойства
- •8.5.3Методы класса tCustomAdoDataSet
- •8.5.4События класса tCustomAdoDataSet
- •8.6Компонент tadoDataSet
- •8.7Компонент tadoTable
- •8.8Компонент tadoQuery
- •9Компоненты визуализации данных в Delphi
- •9.1Компонент tdbGrid
- •9.1.1Свойства
- •9.1.2Дополнительные возможности сетки
- •9.2Компоненты визуализации полей текущей записи
- •9.2.1Компонент tdbText
- •9.2.2Компонент tdbEdit
- •9.2.3Компонент tdbCheckBox
- •9.2.4Компонент tdbRadioGroup
- •9.2.5Списочные компоненты
- •9.2.6Компонент tdbMemo
- •9.2.7Компонент tdbRichEdit
- •9.2.8Компонент tdbCtrlGrid
- •9.2.9Компонент tdbNavigator
- •Приложение 2. Бд "поставщик книг"
- •Рекомендованная литература
9.2.9Компонент tdbNavigator
Строго говоря, компонент TDBNavigator (навигатор БД) не предназначен для отображения данных. Его назначение - дать пользователю программы удобное средство перемещения по записям НД и облегчить ему такие действия, как вставка новой записи, а также редактирование и удаление существующей записи. Однако навигатор БД используется только совместно с компонентами визуализации, поэтому мне кажется вполне уместным рассмотреть его особенности именно в этом разделе.
На рисунке 12.12 показаны кнопки навигатора.
Рисунок 8.86 – Кнопки навигатора БД
Назначение кнопок в порядке следования слева направо:
First - устанавливает курсор на первую запись;
Prior - устанавливает курсор на предыдущую запись;
Next - устанавливает курсор на следующую запись;
Last - устанавливает курсор на последнюю запись;
Insert - переводит НД в режим вставки новой записи;
Delete - удаляет текущую запись;
Edit - переводит НД в режим редактирования;
Post - запоминает изменения, сделанные в текущей записи;
Cancel - отменяет изменения, сделанные в текущей записи;
Refresh - обновляет НД (для TQuery - только если запрос обновляемый).
С помощью свойства DataSource компонент связывается с нужным источником данных TDataSource - это все, что необходимо для его нормальной работы. Представленное ниже свойство управляет отображением диалогового окна с просьбой подтвердить удаление записи (значение True этого свойства выводит окно):
property ConfirmDelete: boolean;
Если следующее свойство имеет значение True, кнопки будут плоскими, в противном случае - объемными:
property Flat: boolean;
С помощью другого свойства можно отображать только те кнопки навигатора, которые действительно необходимы:
type TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh);
type TButtonSet = set of TNavigateBtn;
property VisibleButtons: TButtonSet;
Например, если НД является результатом выполнения необновляемого запроса, в навигаторе имеет смысл оставить только первые 4 кнопки.
С помощью следующего метода можно имитировать щелчок на нужной кнопке навигатора:
procedure BtnClick (Index: TNavigateBtn);
Для компонента определены два специфических события:
type ENavClick = procedure (Sender: TObject; Button: TNavigateBtn) of object;
property BeforeAction: ENavClick;
property OnClick: ENavClick;
Обработчик первого события получает управление перед выполнением действия, связанного со щелчком на кнопке Button, в то время как обработчик OnClick - после выполнения действия.
Приложение 2. Бд "поставщик книг"
Ниже приводится описание 5-ти основных таблиц.
Таблица 1.1 - NAKLS
Имя поля |
Назначение |
Naklld |
Уникальный идентификатор накладной. По этому полю нужно создать первичный ключ |
nDate |
Дата составления накладной. По этому полю можно создать индекс для сортировки накладных по мере их поступления |
nType |
Тип накладной: 0 - покупка у поставщика; 1 - продажа покупателю; 2 - возврат поставщику; 3 - возврат от покупателя; 4 - книги получаются по обмену; 5 - книги передаются по обмену; 6 - покупка с предоплатой; 7 - продажа с предоплатой |
nFirm |
Уникальный идентификатор партнера (поле FirmId таблицы FIRMS) |
nBook |
Уникальный идентификатор книги (поле Bookld таблицы BOOKS) |
… |
… |
Таблица 1.2 - BOOKS
Имя поля |
Назначение |
Bookld |
Уникальный код книги (первичный ключ) |
bName |
Название книги (индексное поле) |
bAuthor |
Автор(ы) |
bPublish |
Издательство |
bYear |
Год выпуска |
bPrice |
Цена покупки книги |
… |
… |
Таблица 1.2 - FIRMS
Имя поля |
Назначение |
Firmld |
Уникальный идентификатор партнера (первичный ключ) |
fName |
Наименование партнера (индексное поле) |
fAddress |
Адрес партнера |
fCity |
Город |
fPhone |
Телефон(ы) |
fEMaiL |
Адрес электронной почты |
… |
… |
Таблица 1.4 - MOVEBOOK
Имя поля |
Назначение |
Moveld |
Уникальный идентификатор (первичный ключ) |
mNakl |
Код накладной из поля Naklld таблицы NAKLS (индексное поле) |
mBook |
Код книги из поля Bookld таблицы BOOKS (индексное поле) |
… |
… |
Таблица 1.5 - PAYMENTS
Имя поля |
Назначение |
PayID |
Уникальный идентификатор платежного документа (первичный ключ) |
pFirm |
Код партнера из поля Firmld таблицы FIRMS |
pOut |
Направление платежа: True - партнеру; False - от партнера |
pDate |
Дата платежа |
pSum |
Сумма платежа |
Таблица 1.6 - TYPENAKL
Имя поля |
Назначение |
TypeID |
Уникальный идентификатор типа накладной (первичный ключ) |
tName |
Содержание типа наладной |
