Открытие объектов подключения ADO и Recordset
В этой статье описано, как открыть объекты подключения ADO и Recordset.
Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 168336
Сводка
Объекты данных ActiveX (ADO) предлагают несколько способов открытия объектов Connection и Recordset. В этой статье представлен пример кода для нескольких распространенных методов для каждого объекта.
Дополнительная информация
Существует несколько способов открыть объект подключения в ADO:
- Задав для
ConnectionString
свойства допустимую строку Connect, а затем вызовитеOpen()
метод . Это строка подключения зависит от поставщика. - Путем передачи допустимой строки Connect первому аргументу
Open()
метода . - Путем передачи допустимого объекта Command в первый аргумент метода Open recordset.
- Путем передачи имени источника данных ODBC, а также при необходимости идентификатора пользователя и пароля в метод объекта
Open()
подключения.
Существует три способа открыть объект Recordset в ADO:
- Открыв набор записей из
Connection.Execute()
метода . - Открыв набор записей из
Command.Execute()
метода . - Путем открытия объекта Recordset без объекта Connection или Command и передачи допустимой строки Connect во второй аргумент
Recordset.Open()
метода .
В этом коде предполагается, что Nwind.mdb устанавливается вместе с Visual Basic и находится в C:\Program Files\DevStudio\VB directory
:
Option Explicit
Private Sub cmdOpen_Click()
Dim Conn1 As New adodb.Connection
Dim Cmd1 As New adodb.Command
Dim Errs1 As Errors
Dim Rs1 As New adodb.Recordset
Dim i As Integer
Dim AccessConnect As String
' Error Handling Variables
Dim errLoop As Error
Dim strTmp As String
AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
'---------------------------
' Connection Object Methods
'---------------------------
On Error GoTo AdoError ' Full Error Handling which traverses
' Connection object
' Connection Open method #1: Open via ConnectionString Property
Conn1.ConnectionString = AccessConnect
Conn1.Open
Conn1.Close
Conn1.ConnectionString = ""
' Connection Open method #2: Open("[ODBC Connect String]","","")
Conn1.Open AccessConnect
Conn1.Close
' Connection Open method #3: Open("DSN","Uid","Pwd")
Conn1.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
"DBQ=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
Conn1.Close
'--------------------------
' Recordset Object Methods
'--------------------------
' Don't assume that we have a connection object.
On Error GoTo AdoErrorLite
' Recordset Open Method #1: Open via Connection.Execute(...)
Conn1.Open AccessConnect
Set Rs1 = Conn1.Execute("SELECT * FROM Employees")
Rs1.Close
Conn1.Close
' Recordset Open Method #2: Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Set Rs1 = Cmd1.Execute
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Method #3: Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Rs1.Open Cmd1
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Method #4: Open w/o Connection & w/Connect String
Rs1.Open "SELECT * FROM Employees", AccessConnect, adOpenForwardOnly
Rs1.Close
Done:
Set Rs1 = Nothing
Set Cmd1 = Nothing
Set Conn1 = Nothing
Exit Sub
AdoError:
i = 1
On Error Resume Next
' Enumerate Errors collection and display properties of
' each Error object (if Errors Collection is filled out)
Set Errs1 = Conn1.Errors
For Each errLoop In Errs1
With errLoop
strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
strTmp = strTmp & vbCrLf & " ADO Error # " & .Number
strTmp = strTmp & vbCrLf & " Description " & .Description
strTmp = strTmp & vbCrLf & " Source " & .Source
i = i + 1
End With
Next
AdoErrorLite:
' Get VB Error Object's information
strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
strTmp = strTmp & vbCrLf & " Generated by " & Err.Source
strTmp = strTmp & vbCrLf & " Description " & Err.Description
MsgBox strTmp
' Clean up gracefully without risking infinite loop in error handler
On Error GoTo 0
GoTo Done
End Sub
ЗАМЕТКИ ОБ ОШИБКАХ
Только объект ADO Connection имеет коллекцию ошибок. Читатель наблюдения заметит, что для примеров действует упрощенный RecordSet.Open
обработчик ошибок. В случае ошибки при открытии объекта RecordSet ADO должна возвращать наиболее явную ошибку от поставщика OLEDB. Ниже приведены некоторые распространенные ошибки, которые могут возникнуть в приведенном выше коде.
Если вы опустите параметр DefaultDir в строке подключения (или возникла ошибка в нем), вы можете получить следующую ошибку:
Ошибка ADO # -2147467259
Описание [Microsoft][ODBC Microsoft Access 97 Driver] '(unknown)'
не является допустимым путем. Убедитесь, что имя пути —
правильно написаны и что вы подключены к серверу
в котором находится файл.
Исходный поставщик Microsoft OLE DB для драйверов ODBC
При возникновении ошибки в параметре Dbq в строке подключения может возникнуть следующая ошибка:
Ошибка ADO # -2147467259 description [Microsoft][ODBC Microsoft Access 97 Driver] Не удалось найти файл "(unknown)".
Исходный поставщик Microsoft OLE DB для драйверов ODBC
Предыдущие ошибки также заполняют коллекцию Ошибок подключения следующими ошибками:
Ошибка ADO # -2147467259
Описание [Microsoft][диспетчер драйверов ODBC] Драйвер
Сбой SQLSetConnectAttr
Исходный поставщик Microsoft OLE DB для драйверов ODBC
Ошибка ADO # -2147467259
Описание Сбой входа
Исходный поставщик Microsoft OLE DB для драйверов ODBC
Примечание.
Для каждой ошибки номер ошибки ADO совпадает, в данном случае преобразуется в 0x80004005, что является универсальным сообщением об ошибке E_FAIL. Базовый компонент не имеет определенного номера ошибки для обнаруженного условия, но полезные сведения никогда не вызываются в ADO.
Ссылки
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по