- •Технології проектування баз даних в 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.6Компонент tdbMemo
Компонент TDBMemo предназначен для отображения и редактирования мемо-полей (полей комментариев), которые служат для хранения в таблицах БД многострочных текстов. Компонент TDBMemo является аналогом компонента ТМеmо с той разницей, что источником данных для него служит мемо-поле НД. В связи с этим его свойства, методы и события в основном совпадают со свойствами, методами и событиями компонента ТМеmо.
Специфичными для компонента являются свойства DataSource и DataField (в которые следует поместить соответственно имена компонента-источника и мемо-поля), а также следующие свойства:
property AutoDisplay: boolean;
property Field: TField;
Если в свойство AutoDisplay помещено значение True, любые изменения мемо-поля автоматически отображаются в компоненте, а при открытии НД компонент будет отображать содержимое мемо-поля текущей записи. Если в свойство AutoDisplay помещено значение False, содержимое мемо-поля заменяется его названием, а для просмотра или редактирования его значения нужно либо дважды щелкнуть на компоненте, либо выделить его и нажать клавишу Enter.
Свойство Field открывает доступ к мемо-полю.
При корректировке текста в компоненте TDBMemo набор данных, которому принадлежит поле, автоматически переводится в состояние dsEdit. Замечу, что изменение значения свойств Text или Lines не переводит НД в режим редактирования и эти изменения не переносятся в мемо-поле. Поэтому перед внесением изменений в значения свойств Lines или Text следует переводить НД в режим редактирования методом Edit, а затем запоминать изменения методом Post.
9.2.7Компонент tdbRichEdit
Компонент TDBRichEdit позволяет просматривать и корректировать информацию в мемо-поле форматированного комментария. Текст форматированного комментария может содержать фрагменты, набранные различным шрифтом, размером, стилем, цветом и т. д. В отличие от компонента TDBMemo, который позволяет работать только с однородным (неформатированным) текстом, компонент TDBRichEdit умеет интерпретировать специальные символы разметки текста в формате RTF (Rich Text Format - расширенный текстовый формат). Многие свойства, методы и события компонента аналогичны по назначению одноименным свойствам, методам и событиям компонента TRichEdit и в этом разделе не описываются.
Специфичными для компонента являются свойства DataSource, DataField, AutoDisplay и Field, описанные в предыдущем подразделе.
9.2.8Компонент tdbCtrlGrid
Как уже говорилось, существует два способа визуализации данных - таблицы и формы. В таблицах пользователь может видеть одновременно несколько записей НД, что облегчает ему контроль за данными и выбор необходимой записи. При применении формы пользователь в каждый момент видит на экране лишь одну запись НД, но зато имеет простой доступ к любому ее полю, в том числе многострочному или графическому.
Компонент TDBCtrlGrid в известной мере сочетает в себе удобства обоих способов: он представляет собой таблицу, каждая ячейка которой отображается в виде формы (рисунок 12.10).
Рисунок 8.84 – Пример использования компонента TDBCtrlGrid
Рисунок 8.85 – Пример работы с компонентом TDBCtrlGrid на этапе разработки программы
Для работы с компонентом необходимо поместить его на форму, связать с компонентом TDataSource, который, в свою очередь, связать с каким-либо набором данных (TTable или TQuery) и затем разместить на нем необходимые компоненты для работы с полями базы данных - TDBText, TDBEdit, TDBCheckBox и т. п.
Компоненты для работы с полями базы данных требуется разместить в верхней строке компонента TDBCtrlGrid или, если количество столбцов ColCount компонента больше 1, в левой верхней ячейке этого компонента (рисунок 12.11).
Во время прогона программы расположение компонентов в верхней строке (верхней левой ячейке) компонента TDBCtrlGrid и их состав будут реплицированы на все оставшиеся строки (ячейки), как это видно из рисунка 11.11.
Приемы работы с TDBCtrlGrid аналогичны приемам работы с TDBGrid. Текущая строка (ячейка) выделяется пунктирным прямоугольником. Для навигации по сетке компонента используются те же клавиши, что и для TDBGrid.
Для вставки новой записи необходимо нажать клавишу Insert или попытаться перейти с последней записи в НД вниз на одну строку (для сетки с одним столбцом).
Для изменения записи достаточно ввести новое значение в какое-либо поле.
Для удаления записи необходимо нажать комбинацию клавиш Ctrl+Detete.
На возможности редактирования, добавления и удаления записей в компоненте TDBCtrlGrid влияет ряд свойств самого компонента TDBCtrlGrid и компонент, размещенных в ячейках компонента TDBCtrlGrid.
Ниже приводится обзор некоторых свойств, методов и событий компонента TDBCtrlGrid.
Свойства компонента TDBCtrlGrid представлены в таблице 12.6.
Таблица 12.6 - Свойства компонента TDBCtrlGrid
Свойство |
Описание |
property AllowDelete: boolean; |
Разрешает/запрещает удаление записей |
property AllowInsert: boolean; |
Разрешает/запрещает вставку записей |
property ColCount: integer; |
Определяет количество столбцов в сетке |
type TDBCtrlGridOrientation = (goVertical, goHorizontal); property Orientation: TDBCtrlGridOrientation; |
Определяет ориентацию сетки: goVertical - вертикальная (по умолчанию); goHorizontal - горизонтальная (с горизонтальной полосой прокрутки) |
type TDBCtrlGridBorder = fgbNone, gbRaised); property PanelBorder: TDBCtrlGridBorder; |
Тип рамки вокруг каждой ячейки: gbNone - нет рамки; gbRaised- выпуклая рамка |
property PanelHeight: integer; |
Высота ячейки в пикселах |
property PanelWidth: integer; |
Ширина ячейки в пикселах |
property RowCount: integer; |
Определяет количество одновременно показываемых строк сетки |
property SelectedColor: TColor; |
Определяет цвет выделенной ячейки |
property ShowFocus: boolean; |
Разрешает/запрещает обводить пунктирным прямоугольником ячейку с фокусом ввода |
Для компонента TDBCtrlGrid определен метод DoKey:
type TDBCtrlGridKey = (gkNull, gkEditMode, gkPriorTab, gkKextTab, gkLeft,
gkRight, gkUp, gkDown, gkScrollUp, gkScrollDown,
gkPageUp, gkPageDown, gkHome, gkEnd, gkInsert,
gkAppend, gkDelete, gkCancel);
procedure DoKey (Key: TDBCtrlGridKey);
Действие, выполняемое методом, определяется параметром Key:
gkNull- ничего не делать;
gkEditMode - перевести компонент в режим редактирования;
gkPriorTab - передать фокус ввода предыдущей ячейке;
gkNextTab - передать фокус ввода следующей ячейке;
gkLeft - передать фокус ввода ячейке слева;
gkRight - передать фокус ввода ячейке справа;
gkUp - передать фокус ввода ячейке сверху;
gkDown - передать фокус ввода ячейке снизу;
gkScrollUp - прокрутить сетку на строку вверх;
gkScrollDown - прокрутить сетку на строку вниз;
gkPageUp - прокрутить сетку на экран вверх;
gkPageDown - прокрутить сетку на экран вниз;
gkHome - передать фокус ввода первой ячейке;
gkEnd - передать фокус ввода последней ячейке;
gklnsert - перевести компонент в режим редактирования;
gkAppend - перевести компонент в режим добавления записи;
gkDelete - перевести компонент в режим удаления записи;
gkCancel - восстановить режим просмотра.
Для компонента TDBCtrlGrid определены следующие события, аналогичные одноименным событиям сетки TDBGrid: OnClick, OnDblClick, OnDragDrop, OnDragOver, OnEndDrag, OnEnter, OnExit, OnKeyDown, OnKeyPress, OnKeyUp, OnStartDrag. Дополнительно введено событие, которое наступает для каждой ячейки TDBCtrlGrid перед ее отображением:
property OnPaintPanel: TPaintPanelEvent;
TPaintPanelEvent = procedure (DBCtrlGrid: TDBCtrlGrid; Index: integer) of object;
Обработчик этого события может управлять прорисовкой ячейки. Параметр TDBCtrlGrid показывает, какой именно компонент TDBCtrlGrid нуждается в прорисовке; параметр Index определяет индекс отображаемой ячейки.
