- •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. Бд "поставщик книг"
- •Рекомендованная литература
Компонент tadoCommand
Компонент TADOCommandпредназначен в основном для реализацииSQL-запросов, не возвращающих никаких данных. К ним относятся практически все запросы языкаDLL, т.е. запросы, которые не начинаются зарезервированным словомSELECT.
Примечание. Хотя конкретная реализация транслятораSQLзависит от выбранного провайдера, однако в целом компонентыADOследуют промышленному стандартуSQL92.
Исполнение запросов языка DLLвADOидет несколько иначе, чем запросовSELECT. ВBDEв компонентахTQueryдля реализации запросовSELECTиспользуется методOpen(или свойствоActive), в то время какDDL-запросы выполняются методомExecSQL. ВADOдляDDL-запросов выделен специальный компонентTADOCommand. Хотя, при некоторых обстоятельствах (см. ниже) компонентTADOCommandспособен возвращать наборы данных, а компонентTADOTableимеет в своем составе методExecSQL, позволяющий ему выполнятьDDL-запросы. Иными словами, одни и те же запросы в рамкахADOможно выполнять с помощью двух разных компонентовTADOCommandиTADOTable, вернее даже трех компонентов, поскольку рассмотренный выше связной компонент TADOConnection также способен выполнять команду, например:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'
+ 'Data Source=C:\DATA\dbdemos.mdb';
ADOConnection1.Connected := True;
ADODataSet1.Recordset := ADOConnection1.Execute('SELECT * FROM CUSTOMER')
end;
Текст исполняемой команды хранится в свойстве CommandText компонента TADOCommand. Компонент способен за один прием исполнять одну и только одну команду.
Особенностью компонента TADOCommand является специализированный текстовый редактор, с помощью которого можно сформировать команду. Этот редактор (рисунок 10.14) вызывается щелчком на кнопке с многоточием в строке свойства CommandText инспектора объектов.
Рисунок 7.71 –Редактор команды компонента TADOCommand
Все окно редактора поделено на три части. В левой верхней части окна отображается список таблиц БД, с которой связан компонент, а в нижней левой части — список полей, выделенной таблицы. Для выделенной таблицы, всю остальную часть занимает собственно текстовый Редактор. Справочные окна в левой части лишь облегчают набор текста, который в основном формируется вручную в правом поле. Например, необходимо вручную ввести слово SELECT, выделить в нижнем списке строку * и щелкнуть на кнопке Add Field to SQL. Затем вновь вручную вводится слово FROM, в верхнем списке выделяется таблица BOOKS, выполняется щелчок на кнопке Add Table to SQL и т. д.
Как уже упоминалось, компонент TADOCommand способен возвращать записи. Для этого в него включены целых три реализации метода Execute, две из которых как раз и предназначены для создания наборов записей. Использование возвращаемогоНДвозможно с помощью компонента-посредникаTADODataSetпо следующей схеме:
ADODataSet1.Recordset := ADOCommand1.Execute;
Для создания НДмножествоExecuteOptionsне должно содержать значенияeoExecuteNoRecords.
Свойства, методы и события ado компонентов-наборов
Общие свойства с bde-компонентами
В состав ADO-компонентов входят4компонента-набора:TADODataSet,TADOTable,TADOTableиTADOStoredProc. Как и аналогичныеBDE‑компоненты, они имеют общего родителя — абстрактный классTDataSet, и, следовательно, большую часть своих методов, свойств и событий они унаследовали от этого класса, разделяя, таким образом, их со своимиBDE‑аналогами (рисунок10.15).
TComponent
TDataSet
TCastomADODataSet TBDEDataSet
TDBDataSet
ADO-наборы BDE-наборы
Рисунок 10.15 - Фрагмент иерархии наследования ADO и BDE компонентов-наборов
Например, для доступа к данным ADO-компоненты используют те же свойства, что иBDE-компоненты. Следующие операторы аналогичны по функциональности (предполагается, что полеCompany— второе по счету в массивеFieldsи для него создан объектADOTable1Company):
Caption := ADOTable1.FieldValues['Company'];
Caption := ADOTable1['Company'];
Caption := ADOTable1.FieldByName('Company').AsString;
Caption := ADOTable1.Fields[1].Value;
Caption := ADOTable1Company.AsString;
Примечание. Понятно, что к моменту использования этих операторов компонентADOTable1должен быть связан через провайдер с физической таблицейБДи открыт.
Модификация данных и навигация по ним также не отличаются от описанных ранее для BDE-компонент:
ADOTable1.Edit;
ADOTable1Company.Value: = 'Новая компания';
ADOTable1.Post;
Или:
ADOTable1.Open;
while not ADOTable1.EOF do begin
…
ADOTable1.Next
end;
ADO-наборы, так же как BDE- наборы, визуализируют данные через компоненты-посредники TDataSource и компоненты вкладки Data Controls палитры компонентов Delphi.