- •Bde та ado
- •Введение
- •Введение в базы данных
- •Типы субд
- •Стандарт odbc
- •Технологии взаимодействия delphi с бд
- •Особенности технологии bde
- •Особенности технологии ado
- •Таблицы бд и связи между ними
- •Первичные ключи и индексы
- •Демонстрационная бд "поставщик книг"
- •Использование odbc для подключения источника данных. Внешний псевдоним бд
- •Создание внешнего псевдонима бд
- •Создание проекта с бд в технологии bde
- •Особенности использованияbdeдля соединения с источником данных
- •Структура проекта с бд и визуальными компонентами
- •Активизация проекта
- •Главная форма проекта
- •Модуль данных
- •Создание модуля данныхTDataModule
- •Создание компонента tDatabase
- •Создание компонента tTable
- •Создание компонентаTDataSource
- •Связь модуля главного окна с модулем данных
- •Связь сеткиTdbGrid и навигатораDbNavigatorcисточником данныхTDataSource
- •Связь главный-детальный между наборами данных
- •Задание реляционной связи между наборами данных
- •Активизация наборов данных
- •Недостатки полученных решений и пути их устранения
- •Объекты-столбцы сетки dbGrid
- •Объекты-поля наборов данных
- •Создание объектов-полей
- •Присоединение к наборам данных новых полей
- •Присоединение полей из других таблиц. Подстановочные поля
- •Вычисляемые поля
- •Обработчики событий компонент работы с бд
- •Обработчики событий OnGetText полей нд и компонента визуализации данныхTdbGrid
- •Установка системных переменных в обработчике событяOnCreate
- •Бизнес-правила иобработчики событий компонент работы с бд
- •Implementation
- •Sql запросы к бд
- •КомпонентtQuery
- •СозданиекомпонентаtQuery
- •ИспользованиякомпонентаtQuery
- •Свойство sql
- •Методы Open и ExecSql
- •Параметрические запросы
- •Параметрические запросы и свойство DataSource компонента tQuery
- •Связь главный-детальный с компонентомTQuery в качестве детального набора данных
- •Доступ к полям запроса
- •Обращение к значению поля при помощи свойств объектов-полейValueиAsXxxx
- •Обращение к значению поля при помощи свойств набора данных Fields и FieldValues
- •Обращение к значению поля при помощи функции набора данных FieldByName
- •Программный доступ к данным запроса
- •Общая схема программного доступа к данным запроса
- •Последовательная навигация по записям
- •Обзор событий компонентаtQuery
- •Хранимые процедуры и триггеры
- •Хранимые процедуры
- •Создание хранимых процедур
- •Вызов хранимых процедур
- •Триггеры
- •Наборы данных
- •Обзор событий класса tdbDataSet
- •Реализация каскадных изменений и бизнес-правил
- •Другие события
- •Технология ado
- •Основные особенности технологии ado
- •Реализация технологии ado в Delphi
- •Создание проекта с бд в технологии ado. Установка связи с бд
- •Создание модуля данных
- •Начало настройки связи
- •Выбор провайдера
- •Настройка провайдера
- •Настройка провайдераMicrosoftJet4.0oledbProvider
- •Настройка провайдера Microsoft ole db Provider for odbc Drivers
- •Завершение настройки связи
- •Настройка оставшихся компонент модуля данных
- •Особенности использования компонентов ado
- •Базовые объекты ado
- •ОбъектRecordset
- •ОбъектCommand
- •ОбъектParameter
- •Компонент tadoCommand
- •Свойства, методы и события ado компонентов-наборов
- •Общие свойства с bde-компонентами
- •Специфические свойства
- •Методы класса tCustomAdoDataSet
- •События класса tCustomAdoDataSet
- •Компонент tadoDataSet
- •Компонент tadoTable
- •Компонент tadoQuery
- •Компоненты визуализации данных вDelphi
- •Компонент tdbGrid
- •Свойства
- •Дополнительные возможности сетки
- •Компоненты визуализации полей текущей записи
- •Компонент tdbText
- •Компонент tdbEdit
- •Компонент tdbCheckBox
- •Компонент tdbRadioGroup
- •Списочные компоненты
- •Компонент tdbMemo
- •Компонент tdbRichEdit
- •Компонент tdbCtrlGrid
- •Компонент tdbNavigator
- •Приложение 2. Бд "поставщик книг"
- •Рекомендованная литература
Компонент 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.
Компонент tdbRichEdit
Компонент TDBRichEdit позволяет просматривать и корректировать информацию в мемо-поле форматированного комментария. Текст форматированного комментария может содержать фрагменты, набранные различным шрифтом, размером, стилем, цветом и т. д. В отличие от компонента TDBMemo, который позволяет работать только с однородным (неформатированным) текстом, компонент TDBRichEdit умеет интерпретировать специальные символы разметки текста в формате RTF (Rich Text Format - расширенный текстовый формат). Многие свойства, методы и события компонента аналогичны по назначению одноименным свойствам, методам и событиям компонента TRichEdit и в этом разделе не описываются.
Специфичными для компонента являются свойства DataSource, DataField, AutoDisplay и Field, описанные в предыдущем подразделе.
Компонент tdbCtrlGrid
Как уже говорилось, существует два способа визуализации данных - таблицы и формы. В таблицах пользователь может видеть одновременно несколько записей НД, что облегчает ему контроль за данными и выбор необходимой записи. При применении формы пользователь в каждый момент видит на экране лишь одну запись НД, но зато имеет простой доступ к любому ее полю, в том числе многострочному или графическому.
Компонент TDBCtrlGridв известной мере сочетает в себе удобства обоих способов: он представляет собой таблицу, каждая ячейка которой отображается в виде формы (рисунок 12.10).
Рисунок 8.74 –Пример использования компонента TDBCtrlGrid
Рисунок 8.75 –Пример работы с компонентом 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определяет индекс отображаемой ячейки.