Abrir a conexão ADO e objetos Recordset

Este artigo apresenta como abrir a conexão ADO e objetos Recordset.

Versão original do produto: SQL Server
Número de KB original: 168336

Resumo

O ADO (ActiveX Data Objects) oferece várias maneiras de abrir os objetos Connection e Recordset. Este artigo apresenta o código de exemplo para várias técnicas comuns para cada objeto.

Mais informações

Há várias maneiras de abrir um Objeto de Conexão no ADO:

  • Definindo a ConnectionString propriedade como uma cadeia de caracteres connect válida e chamando o Open() método. Esse cadeia de conexão é dependente do provedor.
  • Passando uma cadeia de caracteres connect válida para o primeiro argumento do Open() método.
  • Passando um objeto Command válido para o primeiro argumento do método Open de um Recordset.
  • Passando o nome da fonte de dados ODBC e, opcionalmente, a id do usuário e a senha para o método do Objeto de Open() Conexão.

Há três maneiras de abrir um objeto Recordset no ADO:

  • Ao abrir o Recordset fora do Connection.Execute() método.
  • Ao abrir o Recordset fora do Command.Execute() método.
  • Abrindo o objeto Recordset sem um objeto Connection ou Command e passando uma cadeia de caracteres connect válida para o segundo argumento do Recordset.Open() método.

Esse código pressupõe que Nwind.mdb está instalado com o Visual Basic e está localizado no 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

NOTAS DE ERRO

Somente o objeto Conexão ADO tem uma coleção de erros. O leitor observador observará que um manipulador de erros leve está em vigor para os RecordSet.Open exemplos. No caso de um erro abrir um objeto RecordSet, o ADO deverá retornar o erro mais explícito do provedor OLEDB. Alguns erros comuns que podem ser encontrados com o código anterior seguem.

Se você omitir (ou houver um erro) no parâmetro DefaultDir na cadeia de conexão, poderá receber o seguinte erro:

Erro do ADO # -2147467259
Descrição [Microsoft][ODBC Microsoft Access 97 Driver] '(desconhecido)'
não é um caminho válido. Verifique se o nome do caminho é
escrito corretamente e que você está conectado ao servidor
no qual o arquivo reside.
Provedor OLE DB de origem para drivers ODBC

Se houver um erro no parâmetro Dbq na cadeia de conexão, você poderá receber o seguinte erro:

Erro do ADO # -2147467259 Description [Microsoft][ODBC Microsoft Access 97 Driver] Não foi possível localizar o arquivo '(desconhecido)'.
Provedor OLE DB de origem para drivers ODBC

Os erros anteriores também preenchem a coleção De erros de conexão com os seguintes erros:

Erro do ADO # -2147467259
Descrição [Microsoft][ODBC Driver Manager] Driver's
Falha no SQLSetConnectAttr
Provedor OLE DB de origem para drivers ODBC

Erro do ADO # -2147467259
Falha no logon de descrição
Provedor OLE DB de origem para drivers ODBC

Observação

Para cada erro, o número de erro do ADO é o mesmo, nesse caso, traduzindo para 0x80004005, que é a mensagem de erro genérica E_FAIL. O Componente subjacente não tinha um número de erro específico para a condição encontrada, mas informações úteis nunca foram geradas para o ADO.

Referências