lunes, 31 de mayo de 2010

TEMA 1: Comenzando con ADO - ActiveX Data Objects

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