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

В этой статье описывается, как открыть объекты подключения ADO и Recordset.

Исходная версия продукта: SQL Server
Исходный номер базы знаний: 168336

Итоги

Объекты данных ActiveX (ADO) предлагают несколько способов открытия объектов Connection и Recordset. В этой статье представлен пример кода для нескольких распространенных методов для каждого объекта.

Дополнительная информация

Существует несколько способов открытия объекта подключения в ADO:

  • Присвойте ConnectionString свойству допустимую строку Connect, а затем вызовите Open() метод. Это строка подключения зависит от поставщика.
  • Передав допустимую строку Connect первому аргументу Open() метода.
  • Передав допустимый объект Command в первый аргумент метода Open набора записей.
  • Передав имя источника данных 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 содержит коллекцию ошибок. Наблюдатель заметит, что упрощенный обработчик ошибок действует для RecordSet.Open примеров. В случае ошибки при открытии объекта RecordSet ADO должна возвращать самую явную ошибку от поставщика OLEDB. Некоторые распространенные ошибки, которые могут возникнуть при выполнении предыдущего кода.

Если параметр DefaultDir в строке подключения опущен (или в ней возникает ошибка), может появиться следующая ошибка:

Ошибка ADO # -2147467259
Описание [Microsoft][ДРАЙВЕР MICROSOFT ACCESS 97 ODBC] "(неизвестно)"
недопустимый путь. Убедитесь, что имя пути —
правильное правописание и подключение к серверу
в котором находится файл.
Исходный поставщик MICROSOFT OLE DB для драйверов ODBC

Если в строке подключения возникает ошибка в параметре Dbq, может появиться следующая ошибка:

Ошибка ADO # -2147467259 описание [Microsoft][драйвер Microsoft Access 97 ODBC] не удалось найти файл "(неизвестно)".
Исходный поставщик MICROSOFT OLE DB для драйверов ODBC

Предыдущие ошибки также заполняют коллекцию ошибок подключения следующими ошибками:

Ошибка ADO # -2147467259
Описание [Microsoft][диспетчер драйверов ODBC] Драйвер драйвера
Сбой SQLSetConnectAttr
Исходный поставщик MICROSOFT OLE DB для драйверов ODBC

Ошибка ADO # -2147467259
Сбой входа в описание
Исходный поставщик MICROSOFT OLE DB для драйверов ODBC

Примечание.

Для каждой ошибки номер ошибки ADO совпадает, в этом случае преобразуется в 0x80004005, что является универсальным сообщением об ошибке E_FAIL. Базовый компонент не имеет определенного числа ошибок для обнаруженного условия, но полезные сведения никогда не были вызваны до ADO.

Ссылки