- •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. Бд "поставщик книг"
- •Рекомендованная литература
Доступ к полям запроса
Доступ к полям запроса является частным случаем доступа кзначению поляНД.
К полю НДможно обратиться при помощи3-х способов:
Свойств объектов-полей ValueиAsXXXX;
Функции набора данных FieldByName;
Свойств набора данных FieldsиFieldValues;
Эти способы порождают 5-ть вариантов, которые рассматриваются ниже.
Обращение к значению поля при помощи свойств объектов-полейValueиAsXxxx
Объекты-поля предоставляют наиболее удобные средства Delphi по доступу к данным отдельных полей НД. В проектахDelphi рекомендуется в первую очередь использовать именно этот способ.
Примечание. Признаком хорошего тона является создание в проектахDelphi объектов-полей для всех полей запроса.
Если для поля НД определен объект-поле, получить в программе доступ к соответствующему полю НД можно по имени его объекта-поля.
Пусть создан запрос quBooks
SELECT Bookld, BName, BYear
FROM BOOKS
и все его объекты-поля BooksBookld, BooksBName и BooksBYear.
В начале покажем, как можно обратиться к значению объекта-поля при помощи свойства Value.
Примечание. Этот способ менее универсальный, чем использование свойстваAsXXXX.
В таблице 4.4перечислены типы значений, возвращаемых свойствомValueобъекта-поля:
property Value: variant;
Таблица 4.4 - Типы значений, возвращаемых компонентами в свойствеValue
Тип |
Компонент |
variant |
Все компоненты |
string |
TField, TBlobField |
longInt |
TAutoIncField, TIntegerField, TSmallintFietd, TWordField |
double |
TBCDField, TCurrencyField, TFloatField |
boolean |
TBooleanField |
TDateTime |
TDateField, TDateTimeField, TTimeField |
Например, если BooksBookID– объект-поле типаTAutoIncField, то его свойствоValueвозвращает значение типаlongIntи в результате возможно выражение с автоматическим преобразованием типов отlongIntкString:
Edit1.Text := quBooksBookID.Value
Теперь покажем, как можно обратиться к значению объекта-поля при помощи свойств AsXXXX, которые явно выполняют приведение типов полей, напримерintegerкString. Это наиболее часто используемый способ обращения к значению объекта-поля.
Для приведения типов полей определены следующие свойства AsXXXXобъекта-поля:
property AsBoolean: boolean;
property AsCurrency: currency;
property AsDateTime: TDateTime;
property AsFloat: double;
property Aslnteger; integer;
property AsString: string;
property AsVariant: variant;
Каждое из этих свойств приводит значение поля к соответствующему типу данных, указанному в названии свойства. Например, если BooksBookID- полеTAutoIncField, для приведения его к типуstring нужно воспользоваться свойствомAsString:
Edit1.Text := quBooksBookID.AsString;
Разумеется, тип поля должен быть совместимым с типом данных, к которому приводится значение поля. Например, если MoveSumma - поле TCurrencyField, попытка привести его к несовместимому типу boolean приведет к ошибке.
Обращение к значению поля при помощи свойств набора данных Fields и FieldValues
Если для НД не создан ни один объект-поле, получить доступ к значению поляНДможно через свойства этого набора FieldsиFieldValues:
property Fields[Index]: TField
property FieldValues['Имя_поля']: variant
Примечание.Этот метод можно применять и при наличии объектов-полей
Тип возвращаемого значения поля может быть преобразован с помощью свойства AsXXXX.
Свойство Fields[Index]требует указания порядкового номера поля в списке полейНД. Нумерация полей в свойствеFieldsначинается с0. В приведенном примере запросаquBooksполе'BYear'является2-ым по счету, начиная с0.
Edit1.Text := quBooks.Fields[1].AsString;
Свойство FieldValues['Имя_поля']требует указания имени поля вНД, заключенного в одинарные кавычки. Следует подчеркнуть, что свойствоFieldValuesявляется умалчиваемым свойством дляНД. Поэтому следующие обращения идентичны:
Edit1.Text := quBooks['BYear'];
Edit1.Text := quBooks.FieldValues['BYear'];