- •Технології проектування баз даних в 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. Бд "поставщик книг"
- •Рекомендованная литература
4.6.2Редактирование объекта-столбца
Для редактируемого конкретного объекта-столбца, например NaklID, выделите его в окне редактора столбцов. Затем в окне Object Inspector раскройте список свойства FieldName редактируемого компонента и выберите поле NaklID.
Теперь раскройте список вложенных свойств сложного свойства Title и в его вложенное свойство Caption введите заголовок столбца - № накл. Поместите в свойство Width (Size) ширину колонки 40 (в пикселах экрана).
Руководствуясь таблицей 3.1, создайте остальные объекты-столбцы для сеток.
Для удобства расположения данных в сетке DBGrid, в редакторе столбцов объекты-столбцы можно перемещать вверх и вниз.
Рисунок 3.41 – Заполненное окно редактора столбцов
Внимание! Действует следующее правило: если для сетки DBGrid не создан ни один объект-столбец, в ней отображаются все не "спрятанные" объекты-столбцы, но если в сетке создан хотя бы один объект-столбец, сетка будет отображать данные только из явно созданных объектов-столбцов.
4.7Объекты-поля наборов данных
Поля НД TTable или TQuery выступают как целостная конструкция и не могут рассматриваться и использоваться в программе отдельно.
4.7.1Назначение объектов-полей
Объекты-поля НД становятся "заменителем" соответствующих полей НД и выступают как самостоятельные объекты, которые удобно использовать в программе как отдельные обрабатываемые сущности. Они очень активно используются при формировании сложных запросов к БД.
В частности, механизм создания объектов-полей позволяет расширить исходные НД за счет введения в них полей, которые реально находятся в других таблицах БД или формируются как результат обработки исходных полей. Так, например, чтобы показать в сетках названия партнеров и книг, к исходному НД tbNakls необходимо добавить подстановочные (Lookup) поля из других таблиц.
4.7.2Создание объектов-полей
Ниже показано как создаются объекты-поля для компонент типа TTable. Cовершенно аналогично объекты-поля создаются для компонент типа TQuery.
Перейдите к модулю данных DM и нажмите клавишу F12 для визуализации окна модуля данных.
Двойным щелчком на компоненте tbNakls откройте окно редактора полей (Рисунок 3 .42.а).
Щелкните в окне редактора правой кнопкой мыши и в контекстном меню выберите команду Add all fields - окно редактора заполнится списком всех полей таблицы NAKLS (Рисунок 3 .42.б).
а) незаполненное
б) заполненное
Рисунок 3.42 – Окно редактора полей
Этот список означает, что теперь для каждого поля НД tbNakls создан специальный объект-поле со своими свойствами, методами и событиями.
Если вы щелкнете на любом поле в окне редактора полей, то в окне инспектора объектов станут доступными свойства и события объекта-поля. По умолчанию Delphi присваивает объекту-полю имя, полученное сцеплением имени НД и имени поля, так что теперь в программе окажутся компоненты с именами NaklsNakllD, NaklsNFirm, NaklsNDate и т. д.
Рисунок 3.43 – Окно Object Inspector для поля NaklId, выделенного в редакторе полей
Перечень этих компонентов можно увидеть в окне Object TreeView, а их объявление в классе TDM кода модуля данных.
Рисунок 3.44 – Окно Object TreeView для полей в редакторе полей
Внимание! Следует помнить, что если для НД, например tbNakls:
Не созданы объекты-поля, он содержит данные из всех полей соответствующей таблицы NAKLS;
Создан хотя бы один объект-поле, соответствующий НД tbNakls будет содержать значения только тех полей, для которых явно созданы объекты-поля.
Поэтому лучше принудительно создавать объекты-поля для всех полей НД. Более того, если необходимо расширить НД за счет добавления к нему подстановочных полей из других таблиц, то без объектов-полей в этом случае просто не обойтись.
Описанным выше образом создайте объекты-поля и для НД tbMove.
Примечание 1. Создание объектов-полей для каждого используемого в программе НД можно считать признаком хорошего стиля программирования, так как они упрощают доступ к данным и дают программисту дополнительные возможности. Так с помощью свойства DisplayLabel можно изменить заголовки соответствующих колонок в сетках отображения данных. С помощью обработчика события OnGetText можно изменить формат отображения данных и т.п.
Примечание 2. Использовать свойство Visible = False объектов-полей для их сокрытия в сетке DBGrid нецелесообразно, так как скрытые объекты-поля не будут видны не только в этой сетке, но и в любом другом визуализирующем компоненте Delphi (эти компоненты сосредоточены на вкладке Data Controls палитры компонентов), что затруднит редактирование и ввод данных для соответствующих НД.
