Option Compare Database
Методы Connection и Command возвращают статический набор записей и используются только для просмотра записей
Если предполагается использовать несколько объектов RecordSet, то связь с базой данных надо задавать явно:
'Ïðèìåð 1 íàáîð çàïèñåé ÷åðåç îáúåêò Connection
Sub GetRecordADO1()
Dim cnn As ADODB.Connection 'îáúåêò äëÿ ñîåäèíåíèÿ ñ ÁÄ
Dim rec As ADODB.Recordset 'îáúåêò äëÿ íàáîðà çàïèñåé
Dim stSQL As String 'ñòðîêà äëÿ óñëîâèÿ âûáîðêè
'óñòàíîâèòü ñîåäèíåíèå
Set cnn = CurrentProject.Connection
stSQL = "SELECT * FROM pasport"
'ïîëó÷àåì íàáîð çàïèñåé
Set rec = cnn.Execute(stSQL)
a = rec![Ôàìèëèÿ]
rec.Close
cnn.Close
End Sub
Метод Command в аргументе .CommandText может содержать URL
'Ïðèìåð 2 íàáîð çàïèñåé ÷åðåç îáúåêò Command
Sub GetRecordADO2()
Dim cmd As ADODB.Command 'îáúåêò äëÿ ñîåäèíåíèÿ ñ ÁÄ
Dim rec As ADODB.Recordset 'îáúåêò äëÿ íàáîðà çàïèñåé
Dim stSQL As String 'ñòðîêà äëÿ óñëîâèÿ âûáîðêè
'ñîçäàåì îáúåêò
Set cmd = New ADODB.Command
stSQL = "SELECT * FROM pasport"
'íàñòðàèâàåì ñâîéñòâà îáúåêòà
With cmd
.ActiveConnection = CurrentProject.Connection
.CommandText = stSQL
.CommandType = adCmdText
End With
Set rec = cmd.Execute
rec.MoveNext
a = rec![Ôàìèëèÿ]
rec.Close
End Sub
'Ïðèìåð 2A íàáîð çàïèñåé ÷åðåç îáúåêò Command
Sub GetRecordADO_2A()
Dim cmd As ADODB.Command 'îáúåêò äëÿ ñîåäèíåíèÿ ñ ÁÄ
Dim rec As ADODB.Recordset 'îáúåêò äëÿ íàáîðà çàïèñåé
Dim stSQL As String 'ñòðîêà äëÿ óñëîâèÿ âûáîðêè
'ñîçäàåì îáúåêò
Set cmd = New ADODB.Command
stSQL = "SELECT * FROM pasport"
'íàñòðàèâàåì ñâîéñòâà îáúåêòà
With cmd
.ActiveConnection = CurrentProject.Connection
.CommandText = stSQL
.CommandType = adCmdText
End With
'ñîçäàíèå è îòêðûòèå íàáîðà çàïèñåé
Set rec = New ADODB.Recordset
rec.Open cmd
rec.MoveNext
a = rec![Ôàìèëèÿ]
rec.Close
End Sub
Метод Open дает набор записей пригодный для всех работ
'Ïðèìåð 3 Çàïèñè èç òàáëèöû òåêóùåé áàçû ìåòîäîì Open
Sub GetRecordADO_3()
Dim cnn As ADODB.Connection 'îáúåêò äëÿ ñîåäèíåíèÿ ñ ÁÄ
Dim rec As ADODB.Recordset 'îáúåêò äëÿ íàáîðà çàïèñåé
'óñòàíîâèòü ñîåäèíåíèå
Set cnn = CurrentProject.Connection
Set rec = New ADODB.Recordset
With rec
.ActiveConnection = cnn
.CursorType = adOpenKeyset
.Open Source:="pasport"
End With
a = rec![Ôàìèëèÿ]
rec.Close
End Sub
Статический курсор с последовательным доступом – не позволяет добавлять или изменять записи, движется только вниз
Статический курсор - не позволяет добавлять или изменять записи, движется в двух направлениях, не позволяет видеть записи добавленные другим пользователем
Курсор с доступом по ключу – поддержка всех действий, движется в двух направлениях, не позволяет видеть записи добавленные другим пользователем
Динамический курсор – все позволяет
'Ïðèìåð 4 Çàïèñè èç âíåøíåé áàçû ìåòîäîì Open
Sub GetRecordADO_4()
Dim rec As ADODB.Recordset 'îáúåêò äëÿ íàáîðà çàïèñåé
Dim stSQL As String 'ñòðîêà äëÿ óñëîâèÿ âûáîðêè
Dim stConn As String 'ñòðîêà äëÿ ïóòè ïîäêëþ÷åíèÿ
stConn = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source = C:\Áèáëòîòåêà.mdb;"
stSQL = "SELECT * FROM pasport"
Set rec = New ADODB.Recordset
With rec
.LockType = adLockReadOnly
.Open Source:=stSQL, ActiveConnection:=stConn, Options:=adCmdText
End With
a = rec![Àâòîð êíèãè]
rec.Close
End Sub
'Ïðèìåð 5 Îðãàíèçàöèè ïîèñêà â ADO
Sub FindVacancy()
Dim idList() As Integer
Dim cnn As ADODB.Connection 'îáúåêò äëÿ ñîåäèíåíèÿ ñ ÁÄ
Dim rec As ADODB.Recordset 'îáúåêò äëÿ íàáîðà çàïèñåé
Dim stCrit As String 'ñòðîêà äëÿ óñëîâèÿ âûáîðêè
Dim i As Integer
i = 0
stCrit = "KodAutor =" & Forms!Ïîèñê!Àâòîð
'óñòàíîâèòü ñîåäèíåíèå
Set cnn = CurrentProject.Connection
Set rec = New ADODB.Recordset
With rec
.Open Source:="BooksAurors", ActiveConnection:=cnn, _
CursorType:=adOpenStatic, LockType:=adLockReadOnly
If .RecordCount = 0 Then
MsgBox "Êíèãè îòñóòñòâóþò"
Exit Sub
End If
'èùåì ïåðâóþ çàïèñü ïî êðèòåðèþ
.Find Criteria:=stCrit, SearchDirection:=adSearchForward
'åñëè íå íàøëè, òî âûõîäèì
If .EOF Then
MsgBox "Âàêàíñèè îòñóòñòâóþò"
Exit Sub
Else
Do While Not .EOF
ReDim Preserve idList(i)
idList(i) = ![ÊîäÀâòîðà]
i = i + 1
'ñëåäóþùàÿ çàïèñü
.Find Criteria:=stCrit, SkipRecords:=1
Loop
End If
'çàêðûâàåì îáúåêò
.Close
End With
cnn.Close
Set rec = Nothing
Set cnn = Nothing
End Sub
Использование метода Seek
Sub SeekAuthor()
Dim cnn As ADODB.Connection 'îáúåêò äëÿ ñîåäèíåíèÿ ñ ÁÄ
Dim rec As ADODB.Recordset 'îáúåêò äëÿ íàáîðà çàïèñåé
Set cnn = New ADODB.Connection
With cnn
. Provider = ”Microsoft.Jet.OLEDB.4.0”
.Open “C:\Biblioteka.mdb”
End With
Set rec = New ADODB.RecordSet
stTable = “Authors”
With rec
.Index =”Фамилия”
.Open Source := stTable, _
ActiveConnection := cnn, _
CursorType:=adOpenKeySet, _
LockType:=adLockOptimistic, _
Options:=adCmdTableDirect
.Seek KeyValues = “Петров”, SeekOption = adSeekFirstEQ
If .EOF Then
MsgBox “Не нашли”
Exit Sub
End If
Иначе – обрабатываем найденную запись
.Close
End With
cnn.Close
Set rec = Nothing
Set cnn = Nothing
End Sub
Примеры работы с записями в ADO
Set rec = New ADODB.Recordset
With rec
.ActiveConnection = cnn
.CursorType = adOpenKeyset
.Open Source:="pasport"
Добавление новой записи в ADO
.Addnew
![Фамилия]= “Гераськин”
![Имя]= “Иван”
![Отчество]= “Драбоданович”
.MoveFirst
Редактирование текущей записи в ADO
![Фамилия]= “Светлов”
![Имя]= “Герман”
![Отчество]= “Выферевич”
.MoveLast
Удаление текущей записи
.Delete
End With
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.