Занятие 2. Методы доступа к данным
(Продолжительность занятия 90 минут)
Разработчика больше всего интересует метод доступа, который лучше других подойдет конкретному приложению для работы с БД. Выбор зависит от типа используемой базы данных и от функций, которые должно реализовать приложение. На этом занятии Вы познакомитесь со множеством методов доступа к информации, включая DAO, RDO, ADO и SQL-DMO. Кроме того. Вы узнаете, как для каждого метода выполнить подключение к БД, создать результирующий набор данных и возвратить его клиенту.
Обзор методов доступа к данным
DAO, RDO, ADO и SQL-DMO — это методы доступа, предназначенные для манипулирования данными в реляционных БД (рис. 7.1). Все они выполняют сходные функции, однако каждый оптимизирован для определенной ситуации. Например, DAO лучше подходит для работы с записями в локальной БД Microsoft Access, a RDO — в базе данных SQL Server. Кроме того, у каждого метода свой API или ядро БД.
Прежде чем продолжать чтение, запустите видеоролик Chap05.exe с прилагаемого к книге компакт-диска — он посвящен обзору методов доступа к данным, входящих в арсенал разработчика.
Рис. 7.1 Интерфейсы баз данных для разработчиков
Объекты доступа к данным
DAO — это СОМ-интерфейс для ядра Jet (рис. 7.2). Хотя он создан для работы с базами данных Access, FoxPro или dBase, его можно применять и для доступа к ODBC-совместимым базам данных. Последняя версия DAO — ODBCDirect, которую мы и рассмотрим ниже, — модифицирована для оптимизации поддержки удаленных источников данных.
Подключение средствами DAO
Создание надежного приложения для работы с базами данных средствами любого из интерфейсов состоит из нескольких этапов. В частности, для подключения к БД посредством DAO нужно создать ссылку на библиотеку DAO, объявить объектную переменную и затем установить соединение.
Создание ссылки на библиотеку DAO
Для использования DAO нужно сначала установить ссылку на объектную библиотеку DAO (в настоящее время — Microsoft DAO 3.5 Object Library). Объектная библиотека содержит всю необходимую информацию для разработки кода для DAO. Используемые DAO типы объектов — например, Recordset — не имеют аналогов в
Visual Basic, поэтому, если Вам не удастся создать ссылку на ОАО при попытке объявить необходимые объектные переменные возникнет ошибка
Рис. 7.2 Подключение приложения к удаленным БД средствами DAO
Объект Workspace
Объект Workspase создать информацию среды, включая информацию пользователей или применяемое ядроБД. При работе с DAO не нужно создавать объект Workspase - это происходит автоматически. Кроме того, объект Workspase также отвечает за выбор соответствующего ядра для доступа к внешним данным (Microsoft Jet или OBDCDirect).
Dim wrkJet As Workspace
'Создание объекта Microsoft Jet Workspace
Set wrkJet = CreateWorkspace(" ", "admin", " ", dbUseJet)
Объект Database
Database представляет открытую базу данных. Этот объект, его методы и свойства предназначены для работы с открытой БД.
'Объявление объектной переменной типа Database
Dim db As Database
Подключение к БД
Создав объектную переменную типа Database (и, если нужно, Workspace), Вы можете подключиться к БД средствами метода OpenDatabase.
'Открыть базу данных, используя метод OpenDatabase
Set db = OpenDatabase("C:\DataBases\Northwind.mdb")
Установив соединение с БД, приложение может запрашивать сведения, добавлять новые и удалять существующие записи, а также обновлять данные. Для управления информацией в БД используется объект Recordset.
> Создание ссылки на DAO в Visual Basic
В этом упражнении Вы создадите код Visual Basic для подключения к БД с помощью DAO.
Dim DB As Database
CommonDialog1.ShowOpen
Set DB = OpenDatabase(CommonDialog1.filename)
If Not DB Is Nothing Then
MsgBox "Successfully connected!
Else
MsgBox "Could not connect."
End If
Получение набора записей при помощи DAO
Набор записей (Recordset) — это данные, которые Вы получаете в результате запроса к БД. Например, если Вы подключились к БД и запросили сведения обо всех покупателях, сделавших более 25 заказов, группа записей, указанная в ответе, и называется набором. Объект Recordset управляет наборами записей, созданными при помощи DAO.
Объект Recordset
Объект Recordset описывает группу записей, которые можно просмотреть или изменить. Объект Recordset представляет как записи в базовой таблице, так и результат выполнения запроса. Хотя в наборе много записей, только одна из них может быть текущей в каждый момент.
Dim db As Database
Dim rs As Recordset
'Открыть базу данных
Set db = OpenDatabase("Northwind.mdb")
'Открыть набор записей
Set rs = db.OpenRecordset("SELECT * FROM Employees", dbOpenDynaset, dbReadOnly)
'Добавьте здесь код обработки записей
'Когда закончите, закройте объекты
rs.Close
db.Close
DAO и Microsoft Excel
В этом упражнении Вы воспользуетесь DAO для передачи данных из БД Jet в
рабочую книгу Microsoft Excel.
> Создание ссылки на DAO в Microsoft Excel
> Добавление кода для извлечения данных
Public db As Database Public rs As Recordset
Поле |
Значение |
Name |
Load Data |
Type |
Sub |
Scope |
Public |
Dim iCounter As Integer Dim iRecordNum As Integer
Set db = OpenDatabase("C:\WA\Practice\Nwind.mdb")
Set rs = db.OpenRecordset("Employees")
rs.Movelast
iRecordNum = rs.RecordCount
rs.MoveFirst
Range("A1").Select
For iCounter = 1 To iRecordNum
Cells(iCounter, 1).Value = rs.Fields("FirstName")
Cells(iCounter, 2).Value = rs.Fields("LastName")
rs.MoveNext
Next iCounter
rs.Close
db.Close
> Тестирование приложения
В результате в рабочей книге должен отобразиться список сотрудников.
DAO и ODBC
Средствами DAO Вы можете подключаться к ODBC-совместимым источникам данных (например, к БД SQL Server) следующими способами: открыть источник данных напрямую, создать ссылку на него или воспользоваться средствами ODBCDirect. Имейте в виду, что RDO и ADO лучше подходят для разработки клиент-серверных приложений, чем DAO.
Открытие источника данных напрямую
Хотя это и не лучший способ, DAO позволяет напрямую открыть ODBC-совмес-тимый источник данных. Для этого нужно создать строку подключения с именем ODBC-драйвера, именем сервера, именем БД, регистрационным идентификатором и паролем. Эта строка используется в качестве параметра при подключении к БД и при создании результирующего набора.
Db.Connect =_
"ODBC;Database=pubs;UID=UserName;PWO=Password;DSN=PubsData"
По некоторым причинам этот метод обладает ограниченной производительностью.
Дело в том, что Jet обрывает соединение после создания результирующего набора, что приводит к дополнительным затратам времени на их восстановление.
Для доступа к любой информации об объектах источника данных нужно установить соединение и запросить источник данных.
Подсоединение ODBC-совместимого источника данных
Естественный формат данных для Jet — MDB-формат баз данных Microsoft Access. В частности, Jet может подсоединять источники удаленных данных к MDB-файлу, что позволяет применять стандартный код DAO для доступа к информации и работе с ней. Такие источники в Microsoft Access выглядят как связанные таблицы. Этот способ обычно быстрее открытия напрямую, описанного в предыдущем разделе: каталожная информация об удаленном источнике данных кэшируется в MDB-фай-ле, поэтому ее не приходится извлекать повторно.
Применение ODBCDirect
ODBCDirect — компонент DAO, реализующий прямой доступ к ODBC-совмести-мым источникам данных посредством DAO-доступа к объектам удаленных данных (Remote Data Objects, RDO). Мы обсудим RDO подробнее в следующем разделе. При открытии ODBC-совместимых источников данных через ODBCDirect модель объектов DAO отделяется от ядра Jet. Этот способ удобен, когда приложение одновременно обращается к хранилищам ISAM и ODBC. ODBCDirect позволяет создать рабочее пространство DAO, которое вызывает удаленные источники данных, не применяя ядро Jet. Как следует из названия, ODBCDirect осуществляет доступ к удаленным источникам данных посредством ODBC, не пользуясь средствами ядра Jet.
Dim wrkJet As Workspace
Dim wrkODBC As Workspace
Dim db As Database
Dim cn As Connection
Dim rs1 As Recordset 'Используется Jet
Dim rs2 As Recordset 'Используется ODBCDirect
'Открыть "рабочие пространства" Microsoft Jet и ODBCDirect
Set wrkJet = CreateWorkspace(" ", "admin", " ", dbUseJet)
Set wrkODBC = CreateWorkspace(" ", "admin", " ", dbUseODBC)
'Подключиться с помощью метода OpenDatabase (Jet)
Set db = wrkJet. OpenDatabase("Northwind.mdb")
'Подключиться с помощью метода OpenConnection (ODBCDirect)
Set cn = wrkODBC.OpenConnection(" ", , , _
"ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
'Открыть набор записей с помощью Jet Set rs1 = db.OpenRecordset
("SELECT * FROM Employees", dbOpenDynaset, dbReadOnly)
'Открыть набор записей с помощью ODBCDirect
Set rs2 = cn.OpenRecordset
("SELECT * FROM stores", dbOpenDynamic)
'Добавьте здесь код для обработки записей
'После обработки записей закройте все соединения
rs1.Close
rs2.Close
db.Close
cn.Close
wrkJet.Close
wrkODBC.Close
Использование ODBCDirect
В этом упражнении Вы средствами ODBCDirect извлечете данные из БД Northwind. Для имитации ODBC-совместимого источника данных в упражнении используется ODBC-драйвер Microsoft Access.
> Применение ODBCDirect в Microsoft Excel
Public wsODBC As Workspace Public cnODBC As Connection Public rsODBC Recordset
Dim iCounter As Integer
Set wsODBC = DBEngine.CreateWorkspace("ODBC_ws", "Admin", " ", dbUseODBC)
Set cnODBC = wsODBC.OpenConnection ("New", dbDriverNoPrompt, False, "ODBC;DSN=nwind")
Set rsODBC = cnODBC.OpenRecordset("Employees") Range("A1").Select iCounter = 1
Do Until rsODBC.EOF
Cells(iCounter, 1).Value = rsODBC.Fields("FirstName")
Cells(iCounter, 2).Value = rsODBC. Fields("LastName")
rsODBC.MoveNext
iCounter = iCounter + 1
Loop
rsODBC.Close
cnODBC.Close
wsODBC.Close
> Тестирование приложения
Характеристики решений на базе DАО
Ниже перечислены достоинства и недостатки реализации решений на основе DAO.
Достоинства
Недостатки
Малая эффективность работы с ODBC: DAO не предназначен для работы с ODBC-совместимыми источниками данных
Модель DAO ориентирована на ISAM: поскольку DAO предназначен в первую очередь для работы с ISAM-совместимыми БД, его модель соответствует именно этим базам данных.
DAO постепенно утрачивает свое значение: новые интерфейсы — например, объекты данных ActiveX — постепенно вытесняют DAO.
Объекты удаленных данных
Объекты удаленных данных (Remote Data Objects, RDO) — это эффективная альтернатива DAO для работы с удаленными источниками данных. RDO представляет собой объектную надстройку над API ODBC (рис. 7.3). Подобно интерфейсу и серверам автоматизации СОМ, RDO можно вызывать из любой 32-разрядной среды разработки.
Рис. 7.3 Связь RDO с ODBC
RDO обеспечивает значительно большую производительность и гибкость доступа к удаленным СУБД, чем DAO. Хотя этот метод позволяет получить доступ к любому ODBC-совместимому источнику данных, он оптимизирован для работы с серверами БД, использующими развитые средства запросов (например, Microsoft SQL Server или Oracle).
RDO имеет ряд преимуществ перед DAO и ODBCDirect при подключении к ODBC-совместимым источникам данных.
RDO и DAO
Хотя RDO и DAO проектировались с различными целями, они имеют много общего. Приведенная ниже таблица иллюстрирует сходство основных объектов DAO и RDO.
RDO |
DAO/Jet |
RdoEngine |
DBEngine |
RdoError |
Error |
RdoEnvironment |
Workspace |
RdoConnection |
Workspace |
RdoTable |
Table Def |
RdoResultset |
Recordset |
He реализован |
Table |
Keyset |
Dynaset |
Static |
Snapshot |
Dynamic |
Нет |
Forward-only |
Forward-only |
Cursorless |
Нет |
RdoColumn |
Field |
RdoQuery |
QueryDef |
RdoParameter |
Parameter |
He реализован |
Relation |
He реализован |
Group |
He реализован |
User |
Соединение с использованием RDO
Подобно DAO, RDO имеет иерархическую структуру объектов для управления соединениями с базами данных. Для подключения к БД через RDO нужно установить ссылку на RDO, а затем подключиться к БД при помощи объекта Connection.
Ссылка на объектную библиотеку RDO
Как и в случае DAO, прежде чем использовать RDO в приложении, нужно установить ссылку на объектную библиотеку (текущая версия — Microsoft Remote Data Object 2.0).
Объект Connection
Объект Connection RDO подобен объекту Database DAO. Он представляет собой соединение с базой данных. Хотя объекту Connection нужен объект Environment, RDO создает его автоматически — точно так же, как DAO по умолчанию создает объект Workspace.
Set cn = New rdoConnection
With cn
.Connect = "DSN=pubs;UID=sa;PWD="
. EstablishConnection
EndWith
Создание результирующих наборов средствами RDO
Для создания результирующего набора средствами RDO нужно объявить объекты, определить нужный результирующий набор (табличный или результат запроса) и вызвать соответствующий метод.
Объект Resultset
Объект Resultset представляет собой набор записей, полученных в результате выполнения запроса. Они создаются при помощи метода OpenResultset объектов rdoQuery, rdoTable или rdoConnection.
Dim rs As rdoResultset
Dim SQL As String
SQL = "Select au_frame from Authors"
Set rs = cn.OpenResultset(SQL, rdOpenKeyset, rdConcurReadOnly)
Подключение к БД средствами RDO
В этом упражнении Вы воспользуетесь Visual Basic и RDO для подключения к источнику данных и выполнения запроса. Чтобы упростить Вам жизнь, часть кода мы подготовили заранее. > Открытие проекта
Обратите внимание на заранее созданную ссылку на библиотеку Microsoft Remote Data Object 2.0.
> Подключение к ODBC-совместимому источнику данных
Set cn = New rdoConnection
With cn
.Connect = "DSN=nwind"
.EstablishConnection rdDriverNoPrompt, False
End With
> Заполнение полей ввода данными из таблицы сотрудников
txtFirstName.Text = rs!firstname
txtLastName.Text = rs!lastname
> Изучение кода приложения
Характеристики решений на базе RDO
Вот «плюсы» и «минусы» использования RDO.
Достоинства
Недостатки
Объекты данных ActiveX
Объекты данных ActiveX (ActiveX Data Objects, ADO) — один из самых перспективных методов и, более того, основа универсальной модели доступа к данным.
ADO — это интерфейс к OLE DB. Он разработан для доступа к БД разных типов. В отличие от DAO и RDO, ADO — расширяемая программная модель, которую можно дополнять сервисами независимых поставщиков для доступа к конкретным базам данных.
Сравнение ADO с RDO и DAO
В отличие от RDO, ADO — независимая объектная модель. Это означает, что этот метод позиционируется как интерфейс доступа к данным, заменяющий DAO и RDO. ADO является не конкретной «реализацией» интерфейса доступа к информации, как DAO или RDO, а моделью данных. Расширения версия ADO позволят воспользоваться конкретными функциями различных источников данных (например, средствами ядра Jet).
Перспективы развития ADO
ADO в конечном итоге станет расширением RDO 2.0, предоставляющим более развитый интерфейс и обновленную программную модель. Поскольку ADO — это компонент на основе СОМ, он будет доступен любым приложениям, способным работать с объектами СОМ.
Подключение к БД средствами ADO
В отличие от DAO или RDO, при использовании ADO в коде не обязательно указывать иерархию объектов. Этот метод позволяет не создавать объекты типа Workspace или Database, а напрямую ссылаться на объект типа Recordset. Синтаксис подключения к БД с помощью ADO аналогичен синтаксису RDO.
Установка ссылки на ADO
Как и в случае работы DAO и RDO, приложение должно сначала получить ссылку на объектную библиотеку ADO (текущая версия — Microsoft ActiveX Data Objects 1.5 Library).
Открытие набора записей
При использовании ADO набор записей открывается методом Open. Подробное описание синтаксиса ADO доступно с помощью средства просмотра объектов Visual Basic.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "Select * From Authors", "DSN=pubs;UID=sa;PWD="
Do Until rs.EOF
Print rs!au_lname
rs.MoveNext
Loop
rs.Close
Использование объектов данных ActiveX
В этом упражнении Вы воспользуетесь Visual Basic и ADO для подключения к источнику данных и выполнения запроса. Чтобы упростить Вам жизнь, часть кода мы подготовили заранее.
> Открытие проекта
Обратите внимание на заранее созданную ссылку на библиотеку Microsoft OLE DB ActiveX Data Object 1.0 Library.
> Подключение к ODBC-совместимому источнику данных
Dim rs As New ADODB.Recordset
rs.Open "SELECT LastName, FirstName FROM Employees",
"DSN=nwind;", adOpenKeyset
> Заполнение полей ввода данными из таблицы сотрудников
txtFirstName.Text = rs! firstname
txtLastName.Text = rs!lastname
> Проверка остального кода приложения
Характеристики решений на базе ADO
Вот «плюсы» и «минусы» использования ADO.
Достоинства
Недостатки
SQL-DMO
Объект распределенного управления (Distributed Management Object) Microsoft SQL Server (SQL-DMO) — это объектная модель на основе СОМ, которая позволяет разработчикам снабдить свои приложения средствами администрирования SQL Server. Хотя некоторые административные функции выполняются при помощи хранимых процедур или языков определения данных (Data Definition Languages), SQL-DMO упрощает реализацию этих операций за счет объектной модели.
SQL-DMO позволяет клиентскому приложению манипулировать объектами БД — таблицами, хранимыми процедурами и свойствами сервера — через интерфейс СОМ. SQL-DMO предоставляет приложению следующие возможности:
Резюме
DAO — это СОМ-интерфеис для ядра Jet. Он обеспечивает эффективный доступ к базам данных ISAM. Однако DAO не предназначен для работы с ODBC, и, как следствие, эффективность его взаимодействия с источниками данных этого типа низка. Для подключения к БД с использованием DAO нужно создать ссылку на библиотеку DAO, объявить объектную переменную и установить соединение. Объект Recordset представляет собой записи базовой таблицы или записи, выбранные в результате выполнения запроса. При использовании DAO все манипуляции с информацией выполняются в основном с помощью объекта Recordset.
RDO оптимизирован для работы с источниками данных ODBC, однако сохраняет совместимость с ISAM. Этим методом можно выполнять запросы, возвращающие множественные результирующие наборов, а также ограничивать количество возвращаемых записей и просматривать все сообщения удаленного источника данных, не прерывая выполняющийся запрос. Чтобы подключиться к БД средствами RDO, создайте ссылку на библиотеку RDO и установите соединение с базой данных при помощи объекта Connection. Объект Resultset представляет собой строки, выбранные в результате выполнения запроса к БД.
ADO — это интерфейс к OLE DB. Он разработан для доступа к базам данных разных типов. В отличие от DAO и RDO, ADO — расширяемая программная модель, которую можно дополнять сервисами независимых поставщиков для доступа к конкретным базам данных.
SQL-DMO — объектная модель на основе СОМ, которая позволяет разработчикам снабдить свои приложения средствами администрирования SQL Server. Используя SQL-DMO, клиентское приложение может манипулировать объектами базы данных — таблицами, хранимыми процедурами и свойствами сервера — через интерфейс СОМ.