Cómo abrir objetos Connection y Recordset de ADO

Para obtener una versión de este artículo para Microsoft Visual Basic .NET, consulte 310985 .

Resumen

ActiveX Data Objects (ADO) ofrece varias maneras de abrir objetos Connection y Recordset. En este artículo se presenta código de ejemplo para varias técnicas comunes para cada objeto.

Más información

Hay varias maneras de abrir un objeto Connection dentro de ADO:
  • Establecer la propiedad ConnectionString en una cadena Connect válida y llamar al método Open(). Esta cadena de conexión depende del proveedor.
  • Pasar una cadena Connect válida al primer argumento del método Open().
  • Pasar un objeto Command válido al primer argumento de un método Open de Recordset.
  • Pasar el nombre del origen de datos ODBC y, opcionalmente, el Id. de usuario y la contraseña al método Open() del objeto Connection.
Hay tres maneras de abrir un objeto Recordset dentro de ADO:
  • Abrir Recordset fuera del método Connection.Execute().
  • Abrir Recordset fuera del método Command.Execute().
  • Abrir el objeto Recordset sin un objeto Connection o Command y pasar una cadena Connect válida al segundo argumento del método Recordset.Open().
Este código da por supuesto que se ha instalado Nwind.mdb con Visual Basic y que se encuentra en el directorio C:\Archivos de programa\DevStudio\VB:
   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 ERROR

Sólo el objeto Connection de ADO tiene una colección de errores. El lector atento observará que existe un controlador de errores ligeros para los ejemplos de RecordSet.Open. En caso de error al abrir un objeto RecordSet, ADO debe devolver el error más explícito del proveedor OLEDB. A continuación aparecen algunos errores comunes que se pueden encontrar con el código anterior.

Si omite el parámetro DefaultDir (o hay un error en él) de la cadena Connect, puede recibir el error siguiente:
Error de ADO # -2147467259
Descripción [Microsoft][ODBC Microsoft Access 97 Driver] '(desconocido)'
no es una ruta de acceso válida. Asegúrese de que el nombre de ruta está
escrito correctamente y de que está conectado al servidor
en el que reside el archivo.
Fuente Proveedor OLE DB de Microsoft para controladores ODBC
Si hay un error en el parámetro Dbq de la cadena Connect, puede recibir el error siguiente:
Error de ADO # -2147467259 Descripción [Microsoft] [ODBC Microsoft Access 97 Driver] no pudo encontrar
archivo' (desconocido).'
Fuente Proveedor OLE DB de Microsoft para controladores ODBC
Los errores anteriores también llenan la colección Connection.Errors con los errores siguientes:
Error de ADO # -2147467259
Descripción [Microsoft] [ODBC Driver Manager] Se produjo un error en
SQLSetConnectAttr del controlador
Fuente Proveedor OLE DB de Microsoft para controladores ODBC
Error de ADO # -2147467259
Descripción Se produjo un error en inicio de sesión
Fuente Proveedor OLE DB de Microsoft para controladores ODBC
Tenga en cuenta que para cada error, el número de error de ADO es el mismo, en este caso al traducir a 0x80004005, que es el mensaje de error E_FAIL genérico. El componente subyacente no tenía un número de error específico para la condición encontrada pero aún así se envió a ADO información útil.

Referencias

Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
301216 Cómo llenar un objeto DataSet desde una base de datos mediante Visual Basic .NET
Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
188857 PRB: Usar el método Open para cambiar CursorType y LockType
194979 INFO: ADO crea conexiones adicionales a SQL Server
168335 INFO: Usar ActiveX Data Objects (ADO) mediante Visual Basic
193332 ARCHIVO: MDACCON.EXE usa cadenas de conexión con ODBC/OLEDB/ADO/RDS
Propiedades

Id. de artículo: 168336 - Última revisión: 11/17/2005 - Revisión: 1

Comentarios