Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_6.doc
Скачиваний:
97
Добавлен:
01.12.2018
Размер:
3.77 Mб
Скачать

10.4.2. Объект RecordSet.

Следующим важным объектом ADO является объект RecordSet. Его не следует путать со свойством Recordset объекта Data, используемого в технологии DAO. Там, если на форме есть объект Data, то его свойство Recordset связывается с объектом RecordSet и получает из него хранящийся в объекте RecordSet набор данных.

Фактически объект RecordSet является промежуточной, вспомогательной таблицей, в которую из одной или разных таблиц (или запросов) БД записываются требующиеся для обработки или просмотра данные. Другими словами, объект RecordSet – это набор данных, определяемый нуждами прикладной программы. После заполнения объекта RecordSet данными становятся доступными такие операции, как редактирование записей, добавление новых записей, удаление ненужных записей, замена текущей записи, перемещение по набору записей, включенных в набор. При использовании элемента Data в рамках технологии DAO объект RecordSet создается автоматически. Сейчас же мы рассматриваем возможность обработки данных без использования элемента Data. В этом случае объект RecordSet нужно создать программными средствами. Для создания нового экземпляра объекта RecordSet нужно сначала объявить объектную переменную:

Public rs As New ADODB.RecordSet

Создается объект RecordSet с помощью его метода Open, имеющего синтаксис:

RecordSet.Open([Source],[ActiveConnection],[CursorType], _

LockType],[Option]).

Параметр Source – это имя таблицы БД, которая должна войти в набор данных. Кроме того, это может быть команда, определяющая, какие записи и из каких таблиц БД нужно поместить в набор.

Параметр ActiveConnection определяет соединение с БД, которое будет использоваться для данного экземпляра объекта RecordSet. Поскольку мы осуществили соединение с БД с помощью метода Open объекта Connection, то значение этого параметра можно задать равным cn:

rs.ActiveConnection = cn

Параметр CursorType определяет тип курсора набора данных. Курсор в наборе данных применяется для указания текущей записи, аналогично файловому указателю. Тип курсора определяет, что можно делать с записями набора. Типы курсора для объекта RecordSet могут быть:

- adOpenStatic – указывает, что набор является статической копией источника данных. Изменения, сделанные другими пользователями сети, не попадают в такой набор. Этот набор остается неизменным;

- adOpenForwardOnly - похож на предыдущий, но в таком наборе нельзя перемещаться по записям назад и к конкретно указанной записи. Допускается перемещение только в прямом направлении. Этот тип курсора задается по умолчанию;

- adOpenDynamic – все действия, произведенные пользователями с записями, остаются в наборе. Обеспечивается свободное перемещение по набору;

- adOpenKeyset – аналогичен предыдущему, но все добавленные другими пользователями данные в наборе не отражаются. Удаления и изменения в записях набора при этом сохраняются.

Параметр LockType определяет тип блокировки набора данных, т.е. возможности работы других пользователей сети с данными набора. С помощью блокировки можно предотвратить одновременное изменение одних и тех же данных разными пользователями. Возможны следующие типы блокировки:

- adLockReadOnly – можно только читать данные из набора. Редактирование, удаление или добавление записей невозможно. Этот тип блокировки устанавливается по умолчанию;

- adLockPessimistic – запись блокируется сразу после ее редактирования;

- adLockOptimistic – запись блокируется только при вызове метода Update;

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

Теперь мы можем создать процедуру пользователя, позволяющую подключить объекты ADO к любым данным в нашей БД. Эту процедуру целесообразно записать в стандартный модуль.

В разделе General модуля объявляем переменные:

Public cn As New ADODB.Connection, rs As New ADODB.RecordSet

Эти переменные можно объявлять и оператором Dim внутри той процедуры, где требуются данные из какой-либо таблицы или запроса. Если одновременно требуются данные из нескольких таблиц или запросов, то для каждой из них необходимо объявить такую же пару переменных.

Код процедуры будет следующим:

Public Sub Connect(db$, tb$, cn As Object, rs As Object)

cn.ConnectionString=“Driver=Microsoft Access Driver(*.mdb)

cn.Open (“Provider=Microsoft.Jet.OLEDB.3.51; DataSource=” & _

CurDir$ & “\” & db & “.mdb”)

rs.ActiveConnection = cn

rs.CursorType = adOpenDynamic

rs.LockType = adLockPessimistic

rs.Open tb

End Sub

Вызвать эту процедуру для подключения объектов к нашей БД можно будет в любом месте приложения, задав имена базы данных (параметр db) и таблицы (параметр tb). Например:

Call Connect(“Firma”, “Otdel”, cn, rs)

В результате объекты ADO будут подключены к БД “Firma” и метод Open объекта RecordSet заполнит его данными из таблицы “Otdel”.

Если требуется одновременно подключиться к нескольким таблицам (или запросам), то для каждой из них пишется свой оператор вызова процедуры Connect.

Приведенная выше процедура Connect будет работать, если файл БД расположен в папке проекта. Это удобно, так как делает приложение независимым от конкретного ПК и его дисковой системы. Однако, если проект расположен, например, на дискете, то файл БД может просто не поместиться на ней. В таком случае можно:

- в разделе General модуля объявить строковую переменную:

Public dbn$;

- оператор cn.Open в процедуре Connect записать в виде:

cn.Open (“Provider=Microsoft.Jet.OLEDB.3.51; DataSource=” & dbn)

- в процедуру загрузки формы записать код:

Private Sub Form_Load()

dbn = InputBox(“Введите полное имя файла БД”)

End Sub

Теперь, если файл БД “Firma” расположен на диске “D” в папке “databases”, то при запросе ввода полного имени файла нужно с клавиатуры ввести:

D:\databases\Firma.mdb

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]