Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Использование объектов подключения и набора записей ADO






Владея основами работы с ADO, можно переходить к написанию программ для работы с ADO в приложениях. Мы снова воспользуемся средствами ADO для подключения к базе данных Biblio.mdb, но и этого будет вполне достаточно для демонстрации общих принципов. Начнем со следующего примера и затем перейдем к программированию:

1. Создайте новый проект командой File > New Project. Выберите в диалоговом окне New Project значок Standard EXE и нажмите кнопку ОК.

2. Задайте свойству Name проекта значение ADORecordset.

3. Задайте свойству Name формы Form1 значение frmMain, а свойству Caption — зна-чениеРабота с наборами записей ADO.

4. Создайте список на форме frmMain и задайте его свойству Name значение 1st Authors.

Как упоминалось ранее, элемент данных ADO является элементом ActiveX. Его можно перетащить на форму, как и любой другой элемент. Объекты подключения и набора записей являются DLL-библиотеками (библиотеками динамической компоновки) Active, и доступ к ним осуществляется только с помощью ссылки на библиотеку типов.

 

ПРИМЕЧАНИЕ Библиотека типов содержит полное описание компонента: свойства, методы, события и типы данных.

 

5. Выполните в Visual Basic команду Project > References, чтобы открыть диалоговое окно References.

6. Создайте ссылку на библиотеку типов ADO. Для этого следует установить флажок рядом со строкой Microsoft ActiveX Data Objects 2.0 (рис. 8.19).

 

Puc. 8.19. Создание ссылки на библиотеку типов ADO

 

7. Нажмите кнопку OK, чтобы создать ссылку на библиотеку и закрыть диалоговое окно References. Теперь вы можете использовать объекты подключения и набора записей ADO в своей программе.

8. Добавьте следующие объявления в секцию (General)(Declarations) формы:

 

Private cn As ADODB.Connection

Private rs As ADODB.Recordset

 

9. Вставьте следующий фрагмент в процедуру события Form_Load:

 

Private Sub Form_Load()

Dim cmd As String

Dim sql As String

Dim cn As ADODB.Connection

Dim rs As ADODB.Recordset

 

'Создать строку подключения

cmd = " Provider=microsoft.jet.OLEDB.3.51'" & _

" Data Source=" & _

" C: \Program Files\Microsoft Visual Studio" & _

" \VB98\Biblio.mdb"

 

'Установить соединение с базой данных

Set cn = New ADODB.Connection

With cn

.ConnectionString = cmd

.Open

End With

 

' Создать запрос

sql = " select * from authors"

 

' Открыть набор записей

Set rs.= New ADODB.Recordset

With rs

.Open sql, cn, adOpenForwardOnly, adLockReadOnly

Do While Not rs.EOF

' Включить автора в список

lstAuthors.AddItem rs(" Author")

' Перейти к следующей записи

rs.MoveNext

Loop

' Закрыть набор записей.

Close

End With

Set rs = Nothing

 

' Закрыть подключение

cn.Close

'уничтожить объект подключения

Set cn = Nothing

End Sub

 

10.Сохраните и запустите проект.

Программа просто обращается к базе данных Biblio.mdb и заполняет список именами авторов из таблицы Authors. Наверное, вам покажется, что для такой простой задачи программа получилась слишком большой, но если как следует разобраться, вы поймете, что в ней нет ничего сложного.

В начале программы объявляются две переменные, cmd и sql. В переменной cmd, будет храниться строка подключения ADO, используемая для подключения к базе данных. Переменная sql предназначена для текста SQL-запроса. Следующий фрагмент создает строку для подключения к Biblio.mdb c помощью нового провайдера OLEDB (указывается после конструкции Provider = в начале строки).Если вам потребуется подключиться к источнику данных другого типа, допустим, к SQL Server - укажите другого провайдера. Второй параметр стро ки определяет имя базы данных. Строка подключения ADO выполняет всю основную работу, поэтому ей следует уделить основное внимание. Выделение этого кода в отдельную функцию позволяет создавать различные строки подключения для работы с различными базами данных (например, Access, SQL Server и Oracle). Такой функции можно передавать параметр, по которому строится уникальная строка подключения. Это упростит процесс перенесения ваших приложений с поддержкой ADO на другие источники данных.

Следующий шаг — фактическое подключение к базе данных. Для этого мы создаем объект ADO.Connection и затем устанавливаем его свойство ConnectionString равным cmd. После этого выполняется метод. Open данного объекта. Метод берет данные, находящиеся в свойстве ConnectionString, и использует их для подключения к базе.

После установки соединения с базой мы открываем объект ADO. Recordset для получения записей. Тем не менее сначала необходимо передать ему SQL-запрос, который определяет нужные записи. В нашей программе это делает следующая строка:

 

sql = " select * from authors"

 

Не вдаваясь в подробности SQL, этот запрос означает следующее: «выбрать все (*) записи из таблицы с именем Authors». Именно это и было сделано в нашем примере.

У нас имеется запрос, по которому можно создать набор записей. Новый объект набора записей создается следующим образом:

 

Set rs = New ADODB.Recordset

 

Только что созданный набор не содержит никакой информации. В блоке With мы приказываем ADO открыть набор командой

 

With rs

.Open sql, cn, adOpenForwardOnly, adLockReadOnly

 

Вероятно, вы обратили внимание на параметры, необходимые для открытия набора записей. В первом параметре хранится SQL-запрос для данного набора. Второй параметр, cn, говорит о том, что для подключения к базе данных набор должен использовать объект подключения cn. Можно провести аналогию между набором записей и машиной: подключение — дорога, по которой машина добирается к данным. Следующий параметр сообщает ADO, какой тип курсора базы данных должен использоваться для набора. В следующей таблице перечислены возможные варианты курсоров с краткими описаниями.

 

Тип курсора Описание
adOpenForwardOnly Курсор этого типа может использоваться лишь для последовательного перебора записей в одном направлении. Перебор в обратном направлении и произвольные переходы не разрешаются. Тем не менее этот вариант отличается быстротой и пригодится в случае, если вам потребовалось быстро заполнить список или комбинированное поле
Ad0penKeyset Оптимальный тип курсора для больших наборов. Вы не получаете сообщений об изменениях в данных, которые могут повлиять на ваш набор записей
Ad0penDynamic Курсор позволяет отслеживать все изменения, вносимые другими пользователями в ваш набор записей. Он обладает наибольшими возможностями, но из-за этого работает медленнее всех остальных
AdOpenStatic Статический курсор удобен для небольших наборов

 

Наконец, последний параметр сообщает ADO о том, что доступ к набору записей будет осуществляться только для чтения. Вместо него можно указать другой pe-жимблокировки из следующей таблицы, однако в нашем примере был выбран самый быстрый вариант.

 

Тип блокировки Описание
aLockReadOnly Данный режим блокировки следует использовать лишь в том случае, если вы не собираетесь добавлять, обновлять или удалять записи из набора
AdLockPessimistic Запись блокируется в момент начала редактирования и остается заблокированной до его завершения или перемещения курсора к следующей записи
AdLockOptimistic Оптимистический режим: блокировка включается при вызове метода. Update для записи. В процессе редактирования запись остается незаблокированной и лишь временно блокируется на время сохранения изменений в базе
AdLockBatchOptimistic Режим позволяет выполнять оптимистическую блокировку при обновлении нескольких записей

 

Если все параметры были указаны верно, набор записей открывается и вы можете работать с его данными.

В следующем фрагменте программа в цикле перебирает все записи до тех пор, пока не будет найден признак конца файла (EOF). При перемещении курсора к очередной записи мы заносим данные из поля Author в список:

 

lstAuthors.AddItem rs(" Author")

 

После занесения очередного имени в список мы переходим к следующей записи с помощью метода. MoveNext. Если позабыть об этом, цикл будет работать вечно, потому что признак конца файла никогда не будет достигнут. Наконец, после окончания работы все открытое нужно закрыть, а все созданное — уничтожить. Для этого следует вызвать метод.Close для объектов Recordset и Connection. Далее этим объектам присваивается Nothing для предотвращения утечек памяти в вашем приложении.

 

ВНИМАНИЕ Обрабатывая записи набора в цикле, обязательно включайте в него метод. MoveNext. Если вы забудете это сделать (а это случается часто), ваша программа зациклится. Запишите оператор Do While..., a потом - команду.MoveNext сразу же перед командой Loop, а уже потом вставляйте свой код обработки данных. Тем самым вы сводите вероятность ошибки к минимуму.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.