Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ИП 2010-04-04 doc.doc
Скачиваний:
108
Добавлен:
13.05.2015
Размер:
5.96 Mб
Скачать

9.9.2. Командные средства

Общая схема работы в ADO: подключение библиотекADOк при­ло­жению; подключение к источнику через объектConnection; формирование ка­талога (объектCatalog) при создании таблиц и индексов; открытие, фор­ми­рование и обработка набора данныхRecordset; закрытие и удаление объектовRecordset,Catalog,Connection.

Подключение библиотек

Технология ADOподобнаDAO(п.9.4), но является более современ­ной, универсальной, эффективной и обеспечивает дополнительный доступ к данным черезWeb‑серверInternet. В приложении допускается однов­ремен­ное ис­поль­зование этих технологий с уточнением типа объектных пе­ре­менныхConnection,Database,Recordsetпри их объявлении уточ­нителямиadodbиDAOсоответственно дляADOиDAO.

Пример. Dim adodb As adodb.Recordset: daodb As DAO.Recordeset

Библиотека ADOустанавливается вместе сVisualBasic6.0 или бес­плат­но копируется сWeb‑сервера фирмыMicrosoftпо адресу: (http: //www.microsoft.com/data/ado/.

Внимание!Перед работойcADOкомандойPro­ject/Referencesвыз­о­вите окноReferencesи выберите библиотекуMicro­softActveXDataObjects2.0Library.

Подключение к источнику (Connection)

Основные свойства Connection

Provider‑ имя провайдера (производителя или поставщика СУБД).

ConnectionString‑ строка подключения к серверу базы данных (обычно ука­­зывается имя файла базы). Строку подключения можно присвоить пара­мет­ру методаOpenобъектаRecordset.

CursorLocation‑ место расположения курсора: на стороне клиента/сервера (adUseClient/adUseServer) для всех наборовRecordsetданного соединения.

Properties(“<имя параметра>”)=”<значение>” ‑ дополнительные параметры подключения (Password,UserID).

Примеры подключения баз СУБДAccess,SQL‑Server,Oracle.

Dim Connection As New adodb.Connection ‘ объявление переменной

Connection.Provider = “Microsoft.Jet.OLEDB.4.0“ 'СУБД Access

Connection.ConnectionString = App.Path & “\строительство.mdb“

Connection.Provider=”SQLOLEDB.1” СУБД SQL‑Server

Connection.ConnectionString=”Database=”&App.Path&“\Товары;“& _

“Server=сервер;UID=пользователь;PWD=пароль;”

Connection.Provider=”MSDAORA” СУБД Oracle

Connection.ConnectionString=”пользователь/пароль/название сервиса”

Формирование DSN‑имени источника данных

Внешние источники данных (провайдер, тип СУБД и базы данных) могут меняться, что вызы­вает необходимость корректировки команд под­клю­­че­ния к источ­нику. Этого можно избежать, если зарегистрировать описание внешнего источни­ка в Windowsв видеDSN‑имени командойStart/Setting/Control Panel/ODBC Data Sources (32‑bit)/System DSN/Add. В появившемся окне щелкните на имени провай­дера (например,MicrosoftAccessDriver) и нажмите кнопкуFinish. В полеData Source NameукажитеDSN‑имя источника, обычно имя базы (например, строитель­ство). КнопкойSelectвыберите базу. КнопкамиOKзакончите формированиеDSN­‑имени. Тогда, например, вместо двух команд:

Connection.Provider = “Microsoft.Jet.OLEDB.4.0“ 'СУБД Access

Connection.ConnectionString = App.Path & “\строительство.mdb“ ‘база

можно указать одну команду:

Connection.ConnectionString = “DSN=Строительство“

Основные методы Connection

Open [[<строка подключения>], [<пользователь>], [<пароль>]]‑ под­клю­че­ние и открытие базы данных. В первом параметре можно задать через аргументы значения свойствамConnection, если они не бы­ли указаны. Аргументы задаются в виде <имя аргумента>=<значение> и разделяются точкой с запятой.

BeginTrans, CommitTrans, RollBack‑ начать, закончить и отменить тран­з­ак­цию (п. 9.4.3).

После окончания работы следует указать команды:

Connection.Close ‘ закрыть связь

SetConnection=Nothing‘ освободить память, занятую объектом

Каталог (Catalog)

Каталог ‑ это контейнерный класс для хранения данных о таблицах, курсорах, хранимых процедурах, пользователях и группах. Он исполь­зуется при создании таблиц, индексов, атрибутов пользователей и групп с помощью программного кода. Между объектами CatalogиConnectionсуществует связь типа “один к одному”.

Внимание!Перед работойcкаталогом командойPro­ject/Refe­ren­cesвыз­о­вите окноReferencesи выберите библиотекуMicrosoftADOExt. 2.1forDDLandSe­cu­rity.

Основные свойства Catalog

AciveConnection‑ связывает объектCatalogс объектомConnection.

Tables‑ коллекция объектовTable. Каждый объектTableсодержит кол­лек­ции объектовColumns(описание столбцов таблицы),Indexes(индексы),Keys(ключи),Properties(свойства).

Count‑ число таблиц.

Groups, Users, Views‑ коллекции групп, пользователей, представлений.

После окончания работы с каталогом нужно указать команду:

Set Catalog = Nothing ‘ освободить память, занятую каталогом.

Примерсоздания таблицы и индекса.

Private Sub Command1_Click() ‘ процедура создания таблицы

DimZakazhikiAsNewTable‘ создание переменной типаTable

Dim Catalog As New ADOX.Catalog ‘ создание переменной типа Catalog

Dim Key As New ADOX.Key ‘ создание переменной типа Key

On Error GoTo proc_err ‘ переход на процедуру обработки ошибок

Catalog.ActiveConnection=“Provider=Microsoft.Jet.OLEDB.4.0;” & _

“DataSource=”­­ &App.Path& “\строительство.mdb“ ‘подключение к базе

Zakazhiki.Name= “Заказчики“ ‘имя создаваемой таблицы

Zakazhiki.Columns.Append“Kz“,adInteger‘добавления поляKz

Zakazhiki.Columns.Append“Nz“,adVarWChar, 30 ‘добавления поляKz

Catalog.Tables.Append Zakazhiki ‘добавление в базу таблицы Zakazhiki

Key.Name= “Kz“ ‘наименование ключа

Key.Type=adKeyPrimary‘тип ключа ‑ первичный

Key.Columns.Append“Kz“ ‘добавление поляKzв ключ

Catalog.Tables(“Заказчики“).Keys.Append Key ‘добавление ключа

Set Catalog.ActiveConnection = Nothing ‘удаление каталога

Exit Sub ‘выход из процедуры

proc_err: 'блок обработки ошибок

MsgBox(“Описание: “ &Err.Description+ “Код ошибки: “ & _

Err.Number& “ Источник ошибки: “ &Err.Source) ' вывод сообщения

IfErr.Number= -2147217857Then'таблица уже существует

Catalog.Tables.Delete“Заказчики“ ‘удаление из базы таблицы “Заказчики“

Resume' повторное выполнение команды добавления таблицы

End If ‘конец If

End Sub

Набор данных Recordset

После подключения к источнику создается объектRecordset, кото­рый содержит данные из конкретной таблицы, запроса, курсора или храни­мой проце­ду­ры.

Основные свойства Recordset

EOF/BOFвыход за начало/конец таблицы.

Recordset[.Fields](“<имя поля>”/номер поля)[.Value]илиRecordset![<имя поля>]‑ значение указан­но­го поля (если имя поля не содержит пробелы, то квадратные скобки в последней форме можно не указывать).

Recordset[.Fields](“<имя поля>”/номер поля).OriginalValue‑ получить или восстано­вить исходное значения указанного поля.

Sourceисточник данных для набора (имя таблицы, запроса, хранимой проце­дуры, сохраненного набора данных, объектаCommandили текст ко­ман­дыSQL).

ActiveConnection‑ соединение с базой.

LockType‑ режимы блокировки записей: только чтение (adLockReadOnly), бло­­­ки­ровка от начала редактирования до исполнения методаUpdateили пе­­­ре­хода к следующей записи (adLockPessimistic), блокировка только в мо­ме­нт ис­полнения методаUpdateили перехода к следующей записи (ad­Lock­­Op­tismistic), поддержка обновления группы записей (adLockBatch­Op­ti­mis­tic).

CursorLocation‑ место расположения курсора: на стороне клиента/сервера (adUseClient/adUseServer).

CursorType‑ тип курсора: перемещение только вперед (adOpenFor­ward­On­ly); нельзя просматривать записи, добавленные другим пользователем (ad­Open­Keyset); можно просматривать любые изменения (adOpenDynamic); копия набора (adOpenStatic).

Основные методы Recordset

Open [Source [, ActiveConnection [, CursorType [, LockType]]]]‑ от­кры­тие на­бора с указанием его свойств, если они не были указаны ранее.

Close‑ закрытие набора.

Supports(<тип курсора>)‑ возвращает истину, если провайдер поддержи­вает указанный тип курсора.

Delete [(<группа записей>)]‑ удалить текущую запись (adAffectCurrent), группу записей, определенных свойствомFilter(adAffectGroup), все записи (adAffectAll).

Filter‑ условие отбора записей в виде строки с условием отбора записей. Сим­вольные константы заключаются в апострофы (Rs.Filter=”Nz=’ЗИК’”).

MoveFirst, MoveLast, MovePrevious, MoveNext ‑ переход на первую, пос­лед­­нюю, предыдущую и следующую запись соответственно (с учетом ус­та­новленного фильтра).

AddNew,Update‑ включение новой записи и сохранение внесенных изме­нений. При переходе на другую запись изменения сохраняются.

Recordset.Fields.Refresh‑ повторный вывод полей (обновление) набора.

GetRowsкопирование набора в двумерный массив (п. 9.9.5).

Примерзаполнения таблицы “Заказчики”. Создадим новую формуForm2 (рис. 9.9.2.1) с кноп­ка­ми:Далее (про­дол­жить ввод),Сохра­ни­ть(за­кон­чить тран­зак­­цию),Отме­нить(от­­­­менить транзак­цию),За­кончить (закон­чить ввод данных).

Рис. 9.9.2.1. Форма для ввода данных в таблицу

Процедура заполнения таблицы (кнопка на первой форме)

Private Sub Command2_Click() ‘процедура заполнения таблицы

Dim Connection As New ADODB.Connection

Dim Recordset As New ADODB.Recordset, field As field

Connection.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & _

App.Path& “\строительство.mdb“ ‘подключение и открытие базы

Recordset.Open “Заказчики“, Connection, adOpenDynamic, adLockOptimistic

Recordset.Fields.Refresh ‘обновление набора

Connection.BeginTrans ‘начать транзакцию

Do While True ‘цикл ввода данных

Form2.Text1.Text = 0 : Form2.Text2.Text = ““ 'очистка полей ввода

Form2.Show1 ‘вывод модальной формыForm2 для ввода данных

IfForm2.Tag= “Далее“Then‘обработка кнопки “Далее”

Recordset.AddNew‘создание пустой записи

Recordset.Fields(0).Value = Form2.Text1.Text ‘значение кода заказчика

Recordset.Fields(“Nz”).Value=Form2.Text2.Text ‘наименование заказчика

‘примеры вариантов доступа к значению поля: Recordset(“Nz”).Value,

‘Recordset(“Nz”), Recordset!Nz, Recordset![Nz], Recordset(1).Value,

‘Recordset(1)

Recordset.Update‘сохранение изменения

ElseIfForm2.Tag= “Сохранить“Then‘обработка кнопки “Сохранить”

Connection.CommitTrans ‘закончить транзакцию

Connection.BeginTrans ‘начать новую транзакцию

ElseIf Form2.Tag = “Отменить“ Then ‘обработка кнопки “Отменить”

Connection.RollbackTrans ‘отмена тразакции

Connection.BeginTrans ‘начать новую транзакцию

ElseIf Form2.Tag = “Закончить“ Then ‘обработка кнопки “Закончить”

ExitDo‘выход из цикла ввода данных

EndIf

Loop‘конец цикла ввода данных

Connection.CommitTrans ‘закончить транзакцию

Recordset.Close : Set Recordset = Nothing ‘закрытие

Connection.Close: Set Connection=Nothing ‘закрытие и удаление соединения

End Sub

Процедуры обработки кнопок на форме Form2

Private Sub Далее_Click() :Form2.Tag=“Далее“ :Form2.Hide: End Sub

Private Sub Сохранить_Click():Form2.Tag=“Сохранить“:Form2.Hide: End Sub

Private Sub Отменить_Click() :Form2.Tag=“Отменить“ :Form2.Hide: End Sub

Private Sub Закончить_Click():Form2.Tag=“Закончить“: Form2.Hide: End Sub

Примеротбора и вывода группы записей таблицы в окно отладки.

Private Sub Command3_Click()‘процедура фильтрации и вывода

Dim Connection As New ADODB.Connection

Dim Recordset As New ADODB.Recordset, field As field

Connection.ConnectionString = “DSN=Строительство“ ‘DSN‑имя базы

Connection.Open‘подключение и открытие базы

Recordset.Open“Заказчики“,Connection‘открытие набора

Recordset.Filter= “Nz='Уралмаш'orNz='Химмаш'“ ‘установка фильтра

‘можно было сформировать запрос на выборку записей в виде:

‘Recordset.Open “Select * From [Заказчики]“ & _

‘“Where Nz='Уралмаш' or Nz='Химмаш'“, Connection

Recordset.Fields.Refresh ‘обновление набора

Recordset.MoveFirst‘переход на первую запись таблицы

DoWhileNotRecordset.EOF‘начало цикла чтения записей

ForEachfieldInRecordset.Fields‘цикл вывода полей текущей записи

Debug.Print field.Name & “ = “ & field.Value; “ “; ‘вывод на принтер

Next‘конец цикла вывода полей записи

Recordset.MoveNext:Debug.Print‘переход на следующую запись

Loop‘конец цикла чтения записей

Recordset.Close: Set Recordset = Nothing ‘закрытие набора

Connection.Close: Set Connection=Nothing ‘закрытие и удаление соединения

End Sub