Definición
ADO en ActiveX Data Objets es un modelo de objetos de acceso a datos que se apoya sobre OLEDB. Permite dirigir los datos que vienen de bases de datos relacionales (SQL Server, Oracle…), o de otras fuentes de datos no relacionales como ficheros de texto, fuentes de datos que no son de Microsoft, etc. Es un medio para acceder uniformemente a todos los tipos de datos. En cierta manera podemos decir que ODBC permite acceder a bases de datos relacionales, mientras que OLEDB permite el acceso a todos los tipos de datos, sean relacionales o no.
Este modelo de objetos se ha introducido como modelo de acceso de datos para IIS. Sus principales características son las siguientes:
Mínimo tráfico en la red Thread Safe (soportando accesos concurrentes o multithread) Número mínimo de capas entre las aplicaciones y los datos. Facilidad de utilización: modelo de objetos automatizado Tiene en cuenta los conocimientos adquiridos por los desarrolladores sobre la otras tecnologías como DAO o RDO
Arquitectura tecnológica
OLEDB es una tecnología que tiene como objetivo resolver ciertas restricciones de ODBC. Esta tecnología autoriza el acceso a todo tipo de datos, permitiendo administrar el aspecto de tener distribuidas las fuentes de datos, y tiene en cuenta las restricciones de la web. Esta tecnología tiene como objetivo reemplazar a la tecnología ODBC. ADO es el modelo de objetos que permite simplificar el acceso a esta tecnología.
Un proveedor OLEDB implementa las interfaces OLEDB. Permite a un usuario OLEDB alcanzar todo tipo de fuentes de datos de una manera uniforme a través de este juego de interfaces documentado. En cierto sentido, un proveedor OLEDB es similar a un driver ODBC que proporciona un mecanismo uniforme de acceso a los datos relacionales. Los proveedores OLEDB no sólo proporcionan un mecanismo uniforme de acceso a los datos relacionales, si no que también a datos no relacionales. Además, los proveedores OLEDB se construyen sobre la base del modelo COM (Component Objet Model) mientras que los drivers ODBC están basados en una especificación de APIs de C.
El modelo de objetos ADO
El esquema siguiente muestra los objetos y las relaciones existentes entre los objetos y el modelo.
Objetos y Colecciones del modelo de objetos ADO Los objetos Connection, Recordset y Command son los objetos más significativos de este modelo. Clásicamente, una aplicación las utiliza como:
Objeto o Colección | Utilización |
Objeto Connection | Permite establecer las conexiones entre el cliente y el origen de datos |
Objeto Command | Permite realizar los comandos, como las consultas SQL o las actualizaciones de una base de datos. |
Objeto Recordset | Permite ver y manipular los resultados de una consutla |
Colección Parameters | Es utilizada cuando la consulta del objeto Command necesita los parámetros. |
Colección Errors | La colección Errors y el objeto Error se acceden a través del objeto Connection, a no ser que se produzca un error de proveedor . El objeto Error es diferente del objeto Err de VB, en la medida en que no contiene los errores generados y definidos por el proveedor, por lo tanto, permite obtener información precisa sobre la causa del error. |
Colección Fields | La colección Fields y el objeto Field se utilizan a través del objeto Recordset, una vez que éste contiene los datos. |
Descripción de los objetos y colecciones La colección Properties proporciona la información sobre las características de los diferentes objetos Connection, Command, Recordset y Field. Cada objeto de Property es accesible a través de la colección Properties de cada uno de estos objetos.
Colección Properties
Aunque ADO es un modelo del tipo jerárquico, los objetos de ADO, excepto Error, Field y Property pueden crearse de forma autónoma, es decir, sin hacer referencia al objeto relacionado. Esto es diferente de los objetos DAO y RDO, que requieren en la mayoría de los casos la creación del objeto Parent (por ejemplo, un objeto DAO.Connection necesita un objeto DAO.Workspace para poder crearse).
ADO es un modelo de objetos que permite una gran flexibilidad al programador. Por consiguiente, hay distintas posibilidades para lograr la misma tarea. Por ejemplo, para ejecutar una consulta, es posible usar el método Execute del objeto Command o bien el del objeto Connection.
En resumen, este es un diagrama que muestra las relaciones entre los diferentes objetos que constituyen ADO:
Ejemplos de ADO
Abrir y cerrar una conexión con una base de datos SQL Server usando el proveedor por defecto que es el proveedor de OLEDB para ODBC
Sub ConnectionExample1()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
' Abrir la conexión, especificando el nombre del origen de datos,
' id de usuario, y contraseña.
cn.Open "DSNPubs", "sa", ""
' Si la conexión está abierta, lo muestra.
If cn.State = adStateOpen Then
Debug.Print "Conexión abierta."
End If
' Cerrar la conexión.
cn.Close
End Sub |
Abrir y cerrar una conexión con una base de datos SQL Server usando el proveedor OLEDB para SQL Server que es el proveedor recomendado
Private Sub ConnectionExemple2()
Dim cn As New ADODB.Connection
cn.Provider = "SQLOLEDB"
cn.Open "Data Source=MySQLServerName;Initial Catalog=pubs;", "sa", ""
' Si la conexión está abierta, lo muestra.
If cn.State = adStateOpen Then
Debug.Print "Conexión abierta."
End If
' Cerrar la conexión.
cn.Close
Set cn = Nothing
End Sub
|
Abrir y cerrar un Recordset
Sub RecordsetExample() Dim rs As
New ADODB.Recordset ' Abrir el recordset, especificando la
sentencia SQL ' y la cadena
de conexión. rs.Open "Select * fromtitles","DSN=pubs;UID=sa"
' Bucle a través del recordset e impresión del primer campo.
Do While Not rs.EOF
Debug.Print rs(0)
rs.MoveNext
Loop
' Cerrar el recordset.
rs.Close
End Sub
|
Usar el método Execute del objeto Command para ejecutar una consulta de tipo texto
Sub CommandExample()
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
' Establecer el comando conexión usando una cadena de conexión.
cmd.ActiveConnection = "DSN=pubs;UID=sa"
' Establecer el comando texto, y especificar que es
' una sentencia SQL.
cmd.CommandText = "Select * from titles"
cmd.CommandType = adCmdText
' Crear un recordset.
Set rs = cmd.Execute()
' Bucle a través del recordset e impresión del primer campo.
Do While Not rs.EOF
Debug.Print rs(0)
rs.MoveNext
Loop
' Cerrar el recordset.
rs.Close
End Sub
|
Usar el método Execute del objeto Command para ejecutar un procedimiento de almacenado
Sub ParameterExample()
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim prm As ADODB.Parameter
' Establecer el comando conexión usando una cadena de conexión.
cmd.ActiveConnection = "DSN=pubs;uid=sa"
' Establecer el comando texto, y especificar que es
' una sentencia SQL.
cmd.CommandText = "byroyalty"
cmd.CommandType = adCmdStoredProc
' Establecer un nuevo parámetro para el procedimiento guardado.
Set prm = cmd.CreateParameter("Royalty", adInteger, adParamInput, , 50)
cmd.Parameters.Append prm
' Crear un recordset.
Set rs = cmd.Execute
' Bucle a través del recordset e impresión del primer campo.
Do While Not rs.EOF Debug.Print rs(0)
rs.MoveNext
Loop
' Cerrar el recordset.
rs.Close
End Sub
|
Almacenar los resultados de una consulta Access en un fichero Excel
Private Sub Command1_Click()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
c:\bd1.mdb" cn.Execute "Select * into
[Excel8.0];Database=c:\Test1.xls;Hdr=Yes].[Sheet3] From Clients"
cn.Close
Set cn = Nothing
End Sub
' Explorar la colección Errors.
Sub ErrorExample()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
On Error GoTo AdoError
' Abrir la conexión usando un DSN que no existe.
cn.Open "MissingDSN", "sa", ""
Exit Sub
AdoError:
Dim Errs As ADODB.Errors
Dim errLoop As Error
Dim strError As String
' Bucle hasta el objeto Error en la
' colección Errors y muestra las propiedades.
Set Errs = cn.Errors
For Each errLoop In Errs
Debug.Print errLoop.SQLState
Debug.Print errLoop.NativeError
Debug.Print errLoop.Description
Next
End Sub
|
Enumerar los campos (nombre, tipo y valor) de un recordset
Sub FieldExample()
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Set rs =
New ADODB.Recordset ' Abrir el recordset, especificando la
sentencia SQL ' y la cadena
de conexión. rs.Open "Select * fromauthors","DSN=pubs;UID=sa"
Debug.Print "Fields in Authors Table:" & vbCr
' Bucle hasta el objeto Field en la
' Colección Fields de la tabla y muestra las propiedades.
For Each fld In rs.Fields
Debug.Print "Name: " & fld.Name & vbCr & _
"Type: " & fld.Type & vbCr & _
"Value: " & fld.Value
Next fld
' Cierre del recordset.
rs.Close
End Sub
|
Mostrar los valores de ciertas propiedades de una conexión (el curso de la colección de Properties)
Sub PropertyExample()
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
' Abrir la conexión, especificando el nombre del origen de datos,
' id del usuario, u contraseña.
cn.Open "pubs", "sa"
' Establecer el comando conexión usando una cadena de conexión.
Set cmd.ActiveConnection = cn
' Establecer el comando texto, especificando que es una sentencia SQL.
cmd.CommandText = "Select * from titles"
cmd.CommandType = adCmdText
' Crear el recordset.
Set rs = cmd.Execute()
' Muestra la propiedad ConnectionTimeout de la conexión.
Debug.Print cn.Properties("Connect Timeout")
' Muestra la propiedad CommandTimeout del comando.
Debug.Print cmd.Properties("Command Time out")
' Muestra la propiedad Updatability del recordset.
Debug.Print rs.Properties("Updatability")
' Cierra el recordset.
rs.Close
End Sub
|
Las cadenas de conexión
Si necesita escribir una cadena de conexión, existe una manera de generarla con el asistente de creación de una conexión de datos.
Se puede usar esta herramienta de creación de conexiones de datos en VB:
- Utilize el menú Ver y seleccione Ventana de la vista Datos
- Cree un Entorno de datos haciendo clic en el botón derecho en la ventana de datos.
- En la ventana Entorno de datos, hacer clic en el botón derecho sobre Connection1 para ver las características de la conexión (el proveedor, DSN, las propiedades específicas).
- Probar la conexión antes de hacer clic en el botón de Aceptar
- Entrar en la ventana de propiedades y seleccionar el objeto Connection1: La propiedad DataSource contiene la cadena de conexión necesaria.
No hay comentarios:
Publicar un comentario