Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Компонентная модель взаимодействия с БД
Средства доступа к БД
Система программирования Borland Delphi (Borland C++ Builder) включает в себя развитые средства для разработки приложений баз данных. С помощью этих средств можно создавать полноценные клиентские приложения баз данных (БД). Среди возможностей таких приложений можно назвать: • доступ к локальным и удаленным БД; • представление данных; • формирование отчетов; • оперативный анализ данных. Доступ к БД можно осуществлять с помощью различных технологий. В Borland Delphi 7.0 и Borland C++ Builder 6.0 доступны следующие технологии: 1. BDE (Borland Database Engine). Базовая технология доступа к БД от фирмы Borland. Позволяет получать доступ к реляционным БД с помощью специальных BDE драйверов или через ODBC драйверы. Исторически является первой технологией доступа к БД в средах Borland Delphi и Borland C++ Builder. 2. dbExpress. Более новая и совершенная технология доступа к БД от фирмы Borland. Появилась в 6-й версии Borland Delphi (Borland C++ Builder). По сравнению с BDE обеспечивает более быстрый и удобный доступ к данным. 3. ADO (ActiveX Database Objects). Технология доступа к данным от фирмы Microsoft. В свою очередь базируется на технологии OLE-DB. Обеспечивает удобный и надежный доступ к данным, хотя и несколько более медленный, чем в технологиях BDE и dbExpress. Хорошо подходит для работы с системами управления базами данных (СУБД) от фирмы Microsoft (MS Access, MS SQL Server). 4. InterBase. Специализированная технология доступа к серверу БД Borland InterBase. При работе с этой СУБД обеспечивает наивысшую производительность по сравнению с другими технологиями. Кроме того, сторонними фирмами разработано множество других специализированных технологий доступа к БД конкретных СУБД, таких как Oracle, DB2 и других. Следует отметить, что принципы работы с БД с использованием любой из перечисленных технологий практически одинаковы. В связи с этим основы работы с БД будут рассмотрены на примере технологии BDE, имеющейся в любой версии Borland Delphi (Borland C++ Builder). Получив навыки работы с BDE, перейти к другим технологиям не составляет никакого труда. Для работы с БД в Borland Delphi (Borland C++ Builder) имеются специальные наборы компонентов, с помощью которых доступны перечисленные выше технологии. Компоненты располагаются на следующих вкладках палитры компонентов: • Data Access. Компоненты доступа к данным. Включает в себя невизуальные компоненты, предназначенные для доступа к данным и являющиеся общими для всех технологий; • BDE. Компоненты доступа к данным с помощью технологии BDE; • dbExpress. Компоненты доступа к данным с помощью технологии dbExpress; • ADO. Компоненты доступа к данным с помощью технологии ADO; • InterBase. Компоненты доступа к данным с помощью технологии InterBase; • Data Controls. Визуальные компоненты представления данных; • Decision Cube. Визуальные и невизуальные компоненты для оперативного анализа; • Quick Reports. Визуальные компоненты для формирования отчетов по БД. Принципы работы с перечисленными компонентами будут изложены в последующих параграфах. Обзор утилит в составе Borland Delphi (Borland C++ Builder) для работы с БД В состав системы программирования Borland Delphi (Borland C++ Builder) включены некоторые утилиты, облегчающие написание приложений БД. К таким утилитам следует отнести: • BDE Administrator. Позволяет создавать и изменять так называемые псевдонимы БД. Подробнее работа с данной утилитой, как и с утилитой SQL Explorer, рассматривается в параграфе «Создание псевдонимов БД». • SQL Explorer. Утилита во многом сходная с BDE Administrator, но помимо создания псевдонимов БД позволяет отлаживать SQL-запросы. • Database Desktop. Утилита, позволяющая создавать и заполнять БД. Хорошо работает только с БД формата Paradox. Для других форматов БД применять не рекомендуется. • Datapump. Утилита, позволяющая конвертировать БД из одного формата в другой. Использование утилиты с современными СУБД не рекомендуется. • SQL Monitor. Позволяет отлаживать SQL-запросы при использовании технологии доступа к БД BDE. Из перечисленных утилит наиболее полезной является SQL Explorer.
Технология BDE
Как уже отмечалось, основы работы с БД в среде Borland Delphi (Borland C++ Builder) будут рассмотрены на примере технологии BDE. Принцип взаимодействия с БД по технологии BDE показан на рис.1. Приложение взаимодействует с БД через интерфейс BDE, включающий в себя ряд функций, размещенных в специальных DLL библиотеках. Для каждой БД подготавливается так называемый источник данных, представляющий собой структуру данных, содержащую сведения о местоположении, формате и прочих атрибутах БД. Обращение к источнику ведется по псевдониму или, по-другому, альясу. Принципы создания псевдонимов изложены в параграфе «Создание псевдонимов БД». Через указанный в источнике данных драйвер производится обращение к БД. При этом работа с БД производится одинаково для любого формата БД. Источники данных бывают двух типов: источник данных BDE и источник данных ODBC. В первом случае используются «родные» драйвера BDE. Реально, такой подход можно порекомендовать только для формата БД Paradox. Для более современных СУБД драйвера BDE или отсутствуют, или ненадежно работают (как, например, с MS Access).

Во втором случае взаимодействие с БД осуществляется посредством промежуточной технологии ODBC. ODBC (Open Database Connectivity) – одна из технологий доступа к БД от фирмы Microsoft. Она обеспечивает достаточно быстрый и надежный доступ к БД различных форматов. Такой подход хотя и несколько снижает скорость доступа к данным из-за наличия дополнительной ступени, однако обеспечивает высокую надежность. Для доступа к БД современных СУБД (MS SQL Server, MS Access, MySQL) такой подход хорошо подходит.
Организация запросов к БД
Рассмотрим особенности вызова запросов к БД из приложения. Различают три вида запросов: • Статические запросы – текст запроса полностью формируется на этапе разработки приложения; • Параметрические запросы – текст запроса формируется на этапе разработки приложения и содержит несколько параметров, во время выполнения приложения можно задавать значения параметров; • Динамические запросы – текст запроса полностью формируется на этапе выполнения приложения. При использовании технологии BDE для выполнения запросов применяется компонент TQuery. При использовании технологии ADO для выполнения запросов могут применяться следующие компоненты: • Компонент TADOQuery – аналог компонента TQuery. Является наиболее универсальным. Позволяет выполнять любые SQL запросы, включая операторы SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, EXECUTE и др. Текст запроса размещается в свойстве SQL. Содержит свойство Active логического типа, позволяющее выполнить запрос, возвращающий набор данных (оператор SELECT). Метод ExecSQL позволяет выполнить запрос, не возвращающий набор данных. • Компонент TADODataSet – специализированный компонент для организации запросов на выборку с использованием оператора SELECT. Компонент не позволяет выполнять операторы, не возвращающие наборы данных, такие как: INSERT, UPDATE, DELETE, CREATE TABLE и т.п. Содержит удобный редактор, упрощающий конструирование запросов на выборку. Для вызова редактора используется свойство CommandText. Для выполнения запроса используется свойство Active. • Компонент TADOCommand – специализированный компонент для организации запросов, не возвращающих набор данных, таких как: INSERT, UPDATE, DELETE, CREATE TABLE и т.п. Компонент не позволяет выполнять оператор SELECT. Метод Execute позволяет выполнить запрос. Далее рассмотрим порядок организации запросов из приложений БД на основе технологии ADO.
Средства доступа к БД
Система программирования Borland Delphi (Borland C++ Builder) включает в себя развитые средства для разработки приложений баз данных. С помощью этих средств можно создавать полноценные клиентские приложения баз данных (БД). Среди возможностей таких приложений можно назвать: • доступ к локальным и удаленным БД; • представление данных; • формирование отчетов; • оперативный анализ данных. Доступ к БД можно осуществлять с помощью различных технологий. В Borland Delphi 7.0 и Borland C++ Builder 6.0 доступны следующие технологии: 1. BDE (Borland Database Engine). Базовая технология доступа к БД от фирмы Borland. Позволяет получать доступ к реляционным БД с помощью специальных BDE драйверов или через ODBC драйверы. Исторически является первой технологией доступа к БД в средах Borland Delphi и Borland C++ Builder. 2. dbExpress. Более новая и совершенная технология доступа к БД от фирмы Borland. Появилась в 6-й версии Borland Delphi (Borland C++ Builder). По сравнению с BDE обеспечивает более быстрый и удобный доступ к данным. 3. ADO (ActiveX Database Objects). Технология доступа к данным от фирмы Microsoft. В свою очередь базируется на технологии OLE-DB. Обеспечивает удобный и надежный доступ к данным, хотя и несколько более медленный, чем в технологиях BDE и dbExpress. Хорошо подходит для работы с системами управления базами данных (СУБД) от фирмы Microsoft (MS Access, MS SQL Server). 4. InterBase. Специализированная технология доступа к серверу БД Borland InterBase. При работе с этой СУБД обеспечивает наивысшую производительность по сравнению с другими технологиями. Кроме того, сторонними фирмами разработано множество других специализированных технологий доступа к БД конкретных СУБД, таких как Oracle, DB2 и других. Следует отметить, что принципы работы с БД с использованием любой из перечисленных технологий практически одинаковы. В связи с этим основы работы с БД будут рассмотрены на примере технологии BDE, имеющейся в любой версии Borland Delphi (Borland C++ Builder). Получив навыки работы с BDE, перейти к другим технологиям не составляет никакого труда. Для работы с БД в Borland Delphi (Borland C++ Builder) имеются специальные наборы компонентов, с помощью которых доступны перечисленные выше технологии. Компоненты располагаются на следующих вкладках палитры компонентов: • Data Access. Компоненты доступа к данным. Включает в себя невизуальные компоненты, предназначенные для доступа к данным и являющиеся общими для всех технологий; • BDE. Компоненты доступа к данным с помощью технологии BDE; • dbExpress. Компоненты доступа к данным с помощью технологии dbExpress; • ADO. Компоненты доступа к данным с помощью технологии ADO; • InterBase. Компоненты доступа к данным с помощью технологии InterBase; • Data Controls. Визуальные компоненты представления данных; • Decision Cube. Визуальные и невизуальные компоненты для оперативного анализа; • Quick Reports. Визуальные компоненты для формирования отчетов по БД. Принципы работы с перечисленными компонентами будут изложены в последующих параграфах. Обзор утилит в составе Borland Delphi (Borland C++ Builder) для работы с БД В состав системы программирования Borland Delphi (Borland C++ Builder) включены некоторые утилиты, облегчающие написание приложений БД. К таким утилитам следует отнести: • BDE Administrator. Позволяет создавать и изменять так называемые псевдонимы БД. Подробнее работа с данной утилитой, как и с утилитой SQL Explorer, рассматривается в параграфе «Создание псевдонимов БД». • SQL Explorer. Утилита во многом сходная с BDE Administrator, но помимо создания псевдонимов БД позволяет отлаживать SQL-запросы. • Database Desktop. Утилита, позволяющая создавать и заполнять БД. Хорошо работает только с БД формата Paradox. Для других форматов БД применять не рекомендуется. • Datapump. Утилита, позволяющая конвертировать БД из одного формата в другой. Использование утилиты с современными СУБД не рекомендуется. • SQL Monitor. Позволяет отлаживать SQL-запросы при использовании технологии доступа к БД BDE. Из перечисленных утилит наиболее полезной является SQL Explorer.
Технология BDE
Как уже отмечалось, основы работы с БД в среде Borland Delphi (Borland C++ Builder) будут рассмотрены на примере технологии BDE. Принцип взаимодействия с БД по технологии BDE показан на рис.1. Приложение взаимодействует с БД через интерфейс BDE, включающий в себя ряд функций, размещенных в специальных DLL библиотеках. Для каждой БД подготавливается так называемый источник данных, представляющий собой структуру данных, содержащую сведения о местоположении, формате и прочих атрибутах БД. Обращение к источнику ведется по псевдониму или, по-другому, альясу. Принципы создания псевдонимов изложены в параграфе «Создание псевдонимов БД». Через указанный в источнике данных драйвер производится обращение к БД. При этом работа с БД производится одинаково для любого формата БД. Источники данных бывают двух типов: источник данных BDE и источник данных ODBC. В первом случае используются «родные» драйвера BDE. Реально, такой подход можно порекомендовать только для формата БД Paradox. Для более современных СУБД драйвера BDE или отсутствуют, или ненадежно работают (как, например, с MS Access).

Во втором случае взаимодействие с БД осуществляется посредством промежуточной технологии ODBC. ODBC (Open Database Connectivity) – одна из технологий доступа к БД от фирмы Microsoft. Она обеспечивает достаточно быстрый и надежный доступ к БД различных форматов. Такой подход хотя и несколько снижает скорость доступа к данным из-за наличия дополнительной ступени, однако обеспечивает высокую надежность. Для доступа к БД современных СУБД (MS SQL Server, MS Access, MySQL) такой подход хорошо подходит.
Компонентная модель взаимодействия с БД
Как уже отмечалось, взаимодействие приложения с БД осуществляется с помощью специальных компонентов. На рис. 2 показана обобщенная компонентная модель взаимодействия приложения с БД.

Уровень базы данных реализуется с помощью компонента типа TDatabase. Предназначен для синхронизации подключения к нескольким наборам данных (таблицам, запросам, хранимым процедурам). Также позволяет настраивать параметры соединения с БД. Как правило, уровень используется при работе с удаленными БД. При работе с локальными БД в явном виде может не использоваться. Уровень набора данных реализуется с помощью компонентов, относящихся к базовому типу TDataSet. К таким компонентам относятся: TTable (таблица БД), TQuery (запрос к БД), TStoredProc (вызов хранимой процедуры). Уровень предназначен для получения набора записей, сформированного тем или иным способом. Уровень источника данных реализуется с помощью компонента TDataSource. Служит связующим звеном между визуальными компонентами уровня представления данных и невизуальными компонентами уровня набора данных. Позволяет синхронно подключить несколько компонентов представления данных к тому или иному набору данных. Уровень представления данных реализуется с помощью компонента TDBGrid. Позволяет в том или ином виде отобразить на экране данные, извлеченные из БД. Также позволяет редактировать данные. В Borland Delphi (Borland C++ Builder) реализована концепция «живых данных». В соответствии с этой концепцией уже на этапе разработки приложения осуществляется подключение к БД. При этом содержимое БД может сразу же отображаться в компонентах представления данных.
Как уже отмечалось ранее, взаимодействие приложения с БД осуществляется через источник данных, для которого задается уникальное на компьютере имя – псевдоним или, по-другому, альяс. Понятия псевдоним и источник данных часто отождествляют. Псевдонимы могут создаваться как с помощью утилиты BDE Administrator, так и с помощью утилиты SQL Explorer. Для обеих утилит этот процесс совершенно аналогичен. Рассмотрим процесс создания псевдонимов. Откроем SQL Explorer, выбрав пункт Explorer из меню Database Delphi (C++Builder). Выберем пункт ODBC Administrator меню Object. Если данная операция запрещена, то необходимо запустить утилиту C: \WINNT\SYSTEM32\odbcad32.exe. На вкладке Пользовательский DSN нажмем кнопку Добавить. В открывшемся окне (рис. 3) выберем тип драйвера Microsoft SQL Server (или SQL Server) и нажмем кнопку Готово. Далее (рис. 4) будет предложено ввести имя псевдонима БД, под которым к ней будем обращаться из клиентских приложений и имя сервера (например, WS208).


В качестве имени псевдонима следует указать какое-либо осмысленной буквосочетание, например, Supply, Transport, Нotel и т.д. В следующем окне необходимо выбрать пункт Проверка подлинности учетной записи SQL Server, что означает, что для доступа к серверу будет использовано имя и пароль, задаваемые на сервере, а не имя и пароль, под которым входили в систему. Следует также убрать флажок напротив надписи Получить параметры, используемые по умолчанию от SQL Server, чтобы не указывать имя и пароль для доступа к БД с расширенными полномочиями (в нашем случае это не надо). В последующих окнах нужно все оставить без изменения, нажимая кнопку Далее и в конце Готово. Альяс будет создан. Обратите внимание, что в окне SQL Explorer альяс пока не появился (появится после закрытия и нового открытия приложения). Следует закрыть SQL Explorer и Borland Delphi (Borland C++Builder). Далее следует связать альяс с уже созданной базой данных. Во всех рассматриваемых в дальнейшем примерах используется БД Поставка товаров, схема которой представлена на рис. 5.

Для лучшего усвоения материала необходимо создать БД Поставка товаров в СУБД SQL Server 2000. Содержимое таблиц представлено в табл. 1–3.

Далее установления связи альяса с базой данных нужно вновь открыть утилиту SQL Explorer, выбрать свой псевдоним (например, Supply) и ввести необходимые сведения о своей базе (рис. 6): DATABASE NAME Поставка товаров (имя БД на сервере) USER NAME sa (имя пользователя сервера)

Утвердить изменения, выбрав пункт Apply меню Object. Следует отметить, что эти сведения можно было ввести и раньше, при создании псевдонима. Дважды щелкнуть по своему псевдониму, после чего в открывшемся окне ввести пароль, например, sa. Произойдет подключение к удаленной БД. Если в результате попытки подключения произойдет ошибка, повторить попытку. В левой части окна выбрать пункт Tables и просмотреть сведения об имеющихся в БД таблицах (рис. 7). Просмотреть свойства своих таблиц (структуру полей). С помощью утилиты SQL Explorer можно также отлаживать SQL запросы. Рассмотрим этот процесс. С целью настройки программы на нормальное отображение русских букв выбрать пункт Text Font меню View и выбрать шрифт Courier вместо Courier New. В правой части окна выбрать вкладку Enter SQL (рис. 8). В соответствующем поле ввода ввести текст SQL-запроса, после чего нажать кнопку (выполнить). В нижней правой части окна появятся результаты выполнения запроса. Далее можно вводить новый запрос. Список введенных запросов можно листать кнопками (стрелка вверх) и (стрелка вниз).

Теперь созданный псевдоним можно использовать в клиентских приложениях для доступа к БД
Скрипт создания базы данных Кинотеатры:
Use master go
create database Kino2 on (Name='Kino2_data', Filename='d:\users\stud\547\Kino2_data.mdf', SIZE=4, MAXSIZE=10, FILEGROWTH=1) LOG ON (NAME='Kino2_log', FILENAME='d:\users\stud\547\Kino2_data.ldf', SIZE=4, MAXSIZE=10, FILEGROWTH=1) GO USE Kino2_data GO
CREATE TABLE [dbo].[Кинотеатры] ( [№кинотеатра] [int] NOT NULL, [название кинотеатра] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL, [адрес] [char] (100) COLLATE Cyrillic_General_CI_AS NOT NULL, [телефон кассы] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL ) ON [PRIMARY] GO
CREATE TABLE [dbo].[Сеансы] ( [№кинотеатра] [int] NOT NULL, [код фильма] [int] NOT NULL, [номер сеанса] [int] NOT NULL, [дата показа] [datetime] NOT NULL, [время показа] [datetime] NOT NULL, [стоимость] [money] NOT NULL ) ON [PRIMARY] GO
CREATE TABLE [dbo].[Фильмы] ( [Код фильма] [int] NOT NULL, [название] [char] (100) COLLATE Cyrillic_General_CI_AS NOT NULL, [страна] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL, [год выпуска] [char] (10) COLLATE Cyrillic_General_CI_AS NOT NULL ) ON [PRIMARY] GO
ALTER TABLE [dbo].[Кинотеатры] WITH NOCHECK ADD CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( [№кинотеатра] ) ON [PRIMARY] GO
ALTER TABLE [dbo].[Сеансы] WITH NOCHECK ADD CONSTRAINT [PK_Сеансы] PRIMARY KEY CLUSTERED ( [№кинотеатра], [код фильма] ) ON [PRIMARY] GO
ALTER TABLE [dbo].[Фильмы] WITH NOCHECK ADD CONSTRAINT [PK_Фильмы] PRIMARY KEY CLUSTERED ( [Код фильма] ) ON [PRIMARY] GO
ALTER TABLE [dbo].[Сеансы] ADD CONSTRAINT [FK_Сеансы_Кинотеатры] FOREIGN KEY ( [№кинотеатра] ) REFERENCES [dbo].[Кинотеатры] ( [№кинотеатра] ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT [FK_Сеансы_Фильмы] FOREIGN KEY ( [код фильма] ) REFERENCES [dbo].[Фильмы] ( [Код фильма] ) ON DELETE CASCADE ON UPDATE CASCADE GO
-- Создание умолчания CREATE DEFAULT D1 AS 0 GO -- Привязка умолчания к объектам EXEC sp_bindefault 'D1','Сеансы.Стоимость' GO -- Создание правила CREATE RULE R1 AS @X LIKE '[А-Я, а-я]%' GO -- Привязка правила к объектам EXEC sp_bindrule 'R1','Кинотеатры.[название кинотеатра]' go
Заполнение базы:
USE Kino2 GO -- Заполнение таблицы Поставщики INSERT INTO Кинотеатры ([№кинотеатра], [Название кинотеатра], Адрес, [Телефон кассы]) VALUES (1, 'Прогресс', 'Рязань', '451234') INSERT INTO Кинотеатры ([№кинотеатра], [Название кинотеатра], Адрес, [Телефон кассы]) VALUES (2, 'Ока', 'Рязань', '920140') INSERT INTO Кинотеатры ([№кинотеатра], [Название кинотеатра], Адрес, [Телефон кассы]) VALUES (3, 'Уют', 'Москва', '7651044') INSERT INTO Кинотеатры ([№кинотеатра], [Название кинотеатра], Адрес, [Телефон кассы]) VALUES (4, 'Быт', 'Липецк', '381855')
-- Заполнение таблицы Товары INSERT INTO Фильмы ([Код фильма], Название, страна, [год выпуска]) VALUES (1, 'Ложка', 'Китай', 10) INSERT INTO Фильмы ([Код фильма], Название, страна, [год выпуска]) VALUES (2, 'Вилка', 'Китай', 12) INSERT INTO Фильмы ([Код фильма], Название, страна, [год выпуска]) VALUES (3, 'Тарелка', 'Россия', 100) INSERT INTO Фильмы ([Код фильма], Название, страна, [год выпуска]) VALUES (4, 'Нож', 'Китай', 50)
-- Заполнение таблицы Поставки INSERT INTO Сеансы ([№кинотеатра], [код фильма], [номер сеанса], [дата показа],[время показа], стоимость) VALUES (2, 1, 1,'16.06.2007','15:20:00', 100) INSERT INTO Сеансы ([№кинотеатра], [код фильма], [номер сеанса], [дата показа],[время показа], стоимость) VALUES (2, 2, 2,'16.06.2007','15:20:00', 200) INSERT INTO Сеансы ([№кинотеатра], [код фильма], [номер сеанса], [дата показа],[время показа], стоимость) VALUES (3, 1, 3,'16.06.2007','15:20:00', 200)
Рассмотрим более подробно компоненты доступа к данным с помощью технологии BDE. К наиболее используемым компонентам относятся: TTable, TQuery, TStoredProc, TDataSource. Компоненты TTable, TQuery, TStoredProc, относящиеся к уровню набора данных, имеют общий родительский класс TDataSet. У перечисленных компонентов есть много общих свойств и методов. Рассмотрим наиболее важные из них. Свойство Active – логического типа. Если принимает значение true, то набор данных активен, т.е. записи в нем доступны для считывания. Свойство DatabaseName – позволяет задать псевдоним БД, с которой работает набор данных. В компоненте TTable добавлено свойство ТаbleName – имя таблицы БД, с которой работает компонент. В компоненте TQuery добавлено свойство SQL – текст SQL-запроса. В компоненте TStoredProc добавлено свойство StoredProcName – имя хранимой процедуры.
Компонент TDataSource имеет важнейшее свойство DataSet, позволяющее присоединить источник данных к требуемому набору данных. К одному набору данных может быть присоединен только один компонент источника данных.
|