ADO
Necesito acceder a bases de datos access desde vb6 y habia pensado en aprender ado y no me funciona ni la ayuda de access ni la de msdn ¿alguien tiene algun manual sobre ado? o alguna otra pista para ponerme al dia en esta técnica
ponte a buscar totoriales y me pasas las paginas
te mando algo de la que encontre
Microsoft ActiveX Data Object (ADO). Objetos, Colecciones, Propiedades y Métodos.
ADO
ActiveX Data Objects. Un conjunto de interfaces de acceso a datos basadas en objetos optimizadas para las aplicaciones basadas en Internet y centradas en datos. ADO está basado en una especificación publicada y se incluye con Microsoft Internet Information Server y con Microsoft Visual InterDev.
Modelo del objeto ADO
Cada objeto conexión, comando, conjunto de registro y campos contiene además la colección propiedades.
Objeto Conexión
Métodos:
BeginTrans , Close , CommitTrans , Execute , Open , OpenSchema , RollbackTrans
Propiedades
Attributes , CommandTimeout, ConnectionString, ConnectionTimeout, CursorLocation, DefaultDatabase, IsolationLevel, Mode, Provider, State, Version
Objeto RecordSet
Métodos:
AddNew, CancelBatch, CancelUpdate, Clone, Close, Delete, GetRows, Move, MoveFirst, MoveLast, MoveNext, MovePrevious, NextRecordset, Open, Requery, Resync, Supports, Update, UpdateBatch
Propiedades
AbsolutePage, AbsolutePosition, ActiveConnection, BOF, Bookmark, CacheSize, CursorLocation, CursorType, EditMode, EOF, Filter, LockType, MarshalOptions, MaxRecords, PageCount, PageSize, RecordCount, Source, State, Status
Objeto Error
Propiedades
Description, HelpContext, HelpFile, NativeError, Number, Source, SQLState
Elementos técnicos
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
Este documento esta relacionado con la versión 2.1 de ADO.
Arquitectura tecnológica
Figura 1 : Arquitectura tecnológica
Definición: OLEDB
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.
Definición : Proveedor OLEDB u OLEDB Provider :
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.
Concretamente, los proveedores OLEDB, u OLEDB Providers son
· El proveedor OLEDB para ODBC también llamado KAGERA o MSDASQL
· El proveedor OLEDB para SQL Server, llamado SQLOLEDB
· El proveedor OLEDB para Oracle llamado MSDAORA
· El proveedor OLEDB para Jet, llamado Jolt
El modelo de objetos ADO
El esquema siguiente muestra los objetos y las relaciones existentes entre los objetos y el modelo.
Figura 2: 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.
Tabla 1: 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.
Figura 3 : 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:
Figura 4: Relaciones entre los objetos de ADO
Histórico de versiones
ADO se proporciona con MDAC que está disponible en la dirección: http://microsoft.com/data
Las versiones existentes son las siguientes:
· MDAC 1.5a
· MDAC 1.5b
· MDAC 1.5c
· MDAC 1.5d
· MDAC 2.0 ó 2.0.3002.20
· MDAC 2.0 SP1 ó 2.0.3002.23
· MDAC 2.0 SP2 ó 2.0.3002.28
· MDAC 2.1
· MDAC 2.1 SP1 ó 2.1.1.3711.11
· MDAC 2.1 SP2 ó 2.1.2.4202.3
· MDAC 2.5 actualmente en versión beta.
En MSDN, existe un artículo sobre las diferentes versiones, hasta la 2.0. Este artículo se titula:
"Redistributing Microsoft Data Access Components"
Para más información acerca de este tema, consulte el capítulo titulado "¿Cómo determinar qué versión de MDAC está instalada?" más adelante en este documento.
Las funcionalidades principales aportadas por ADO 2.x respecto de ADO 1.5 son las siguientes:
· Los eventos generados en los objetos Connection y Recordset, son los que permiten soportar los modos asíncronos. (Conexión asíncrona, ejecución de comandos en modo asíncrono y la recuperación de datos en modo asíncrono)
· Aunque es posible utilizar los recordsets de forma desconectada con ADO 1.5, no es posible guardarlos bajo la forma de archivo reutilizado en el momento de otro lanzamiento de la aplicación, por ejemplo. ADO 2.0 implementa una propiedad Persist-Format y un método Save en el objeto Recordset, lo que permite proteger en el disco un Recordset creado con la opción adLockBatchOptimistic. Esto se utiliza frecuentemente con RDS, en las aplicaciones web.
· Las funcionalidades de ordenar y buscar implementadas en el objeto Recodset.
· Posibilidad para crear algún recordset independiente: Con ADO 2.0, es posible crear un objeto Recordset, manipularlo y usarlo, independientemente de toda fuente de datos. El programador puede agregar campos a este recordset y agregar o modificar los datos
Ejemplo de código
Trabajando con el modelo de objetos
Para utilizar ADO usansdo early binding en un programa VB o VBA, deberá consultar la referencia:
Microsoft ActiveX Data Object x.x Library
eligiendo en el menú Projecto, Referencias en la interfaz de VB o en el editor VBA.
Prototipos
En MSDN, existe un artículo que se titula: "What Are the Objects in the ADO Object model" y que está disponible en la web en la dirección: http://msdn.microsoft.com/library/techart/msdn_workshp1.htm
Vamos a ver a continuación dos ejemplos para:
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 = NothingEnd 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 * from titles", "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.CloseEnd 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.CloseEnd 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.ConnectionSet cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:bd1.mdb" cn.Execute "Select * into [Excel 8.0]; Database=c:Test1.xls;Hdr=Yes].[Sheet3] From Clients" cn.Close Set cn = NothingEnd Sub ' Explorar la colección Errors.Sub ErrorExample()Dim cn As ADODB.ConnectionSet cn = New ADODB.ConnectionOn Error GoTo AdoError ' Abrir la conexión usando un DSN que no existe.cn.Open "MissingDSN", "sa", "" Exit SubAdoError: Dim Errs As ADODB.Errors Dim errLoop As ErrorDim strError As String' Bucle hasta el objeto Error en la' colección Errors y muestra las propiedades.Set Errs = cn.ErrorsFor Each errLoop In Errs Debug.Print errLoop.SQLState Debug.Print errLoop.NativeError Debug.Print errLoop.DescriptionNextEnd 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 * from authors", "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.CloseEnd 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.CloseEnd Sub
Obtener la lista de tablas de una base de datos: para conseguir información sobre la estructura de la base de datos se podrá usar el método de OpenSchema del objeto Connection (Artículo Q186246
Public Sub OpenSchemaX() Dim cnn1 As ADODB.Connection Dim rstSchema As ADODB.Recordset Dim strCnn As String Set cnn1 = New ADODB.Connection strCnn = "Provider=sqloledb;" & _ "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; " cnn1.Open strCnn Set rstSchema = cnn1.OpenSchema(adSchemaTables) Do Until rstSchema.EOF Debug.Print "Table name: " & _ rstSchema!TABLE_NAME & vbCr & _ "Table type: " & rstSchema!TABLE_TYPE & vbCr rstSchema.MoveNext LooprstSchema.Closecnn1.CloseEnd Sub
Las cadenas de conexión
En MSDN, en el artículo Q193332 titulado: "FILE:MDACCON.EXE Using Connection Strings w/ ODBC/OLEDB/ADO/RDS" se encuentran en todas las cadenas de conexión de proveedores diferentes, o drivers ODBC con o sin DSN. Este artículo está disponible en la web: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q193332.
Después de haber visto este artículo es suficiente con copiar y pegar la cadena de conexión que necesita para su aplicación.
Trucos:
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.
Figura 5: Propiedades de Data Link: pantalla 1
Figura 6: Propiedades de Data Link: pantalla 2
También puede usar esta herramienta de creación de datos en el escritorio:
· Haga Clic en el escritorio, seleccionar Nuevo Microsoft Data Link
· Haga Clic con el botón derecho sobre el objeto creado en Propiedades.
· Vea las características de la conexión, y pruébelas antes de validarlas.
· Abria Notepad, y desplácese para cambiar de sitio el objeto Microsoft Data Link creado en el escritorio en Notepad. Notepad contiene la cadena de conexión requerida.
Herramientas de depuración
A menudo, para problemas de depuración de ADO, la clásica depuración de VB no es suficiente. Algunas herramientas proporcionadas permiten disponer de las trazas de lo que sucede entre el PC cliente y el servidor.
Trazas ODBC:
Si se usa el proveedor OLEDB para ODBC , puede ser útil disponer de las trazas de ODBC. Para ello, vaya a Configuración, en el Panel de control "Fuentes de datos de datos ODBC", y en la etiqueta "Seguimiento" haga clic en el botón "Iniciar". Se puede especificar la ruta y el nombre del archivo de registro dónde se almacenarán las trazas. El fichero generado es un fichero de texto.
Figura 7: Trazas ODBC
Trazas OLEDB:
Cuando se usa ODBC, es posible poner en el lugar un sistema de trazas de ODBC, no existe una herramienta equivalente para rastrear claramente las acciones realizadas por ADO u OLEDB.
Abriendo y cerrando la conexión con un servidor SQL Server:
Existen herramientas que cumplen con el estándar de SQL Server que permite visualizar qué es lo que pasa en el servidor. SQLTrace está incluída en SQL Server 6.5, o el generador de perfiles entregado con SQL Server 7. Estas herramientas pueden usarse para visualizar las aperturas y cierres de conexiones generadas por un programa cliente; por ejemplo, uno se conecta al servidor, y crea un filtro para analizar que pasa entre el cliente y el servidor.
Análisis de tramas entre el cliente y el servidor:
Para visualizar paquetes de datos en el tránsito entre el cliente y el servidor, se puede instalar y usar una herramienta llamada Network Monitor. Una versión limitada se proporciona en Windows NT. Es suficiente con instalarla desde Configuración, en el panel de control, en donde el programa se representa con un icono llamado "Red" y en la etiqueta Servicios haga clic en el botón "Agregar" para agregar lo siguientes Servicios:
Agente y herramientas de monitor de red (Network Monitor Tools and Agent)
Una versión más completa se entrega con el producto SMS (Microsoft Systems Management Server).
Información adicional de MDAC
Instalación de MDAC
Descargar MDAC desde la dirección: http://microsoft.com/data
¿Cómo determinar qué versión de MDAC esta instalada?
De varias formas:
· Un documento acerca de las versiones anteriores (hasta la versión 2.0) está disponible en la dirección: http://www.msdn.microsoft.com/library/techart/msdn_redistmdac.htm
te mando algo de la que encontre
Microsoft ActiveX Data Object (ADO). Objetos, Colecciones, Propiedades y Métodos.
ADO
ActiveX Data Objects. Un conjunto de interfaces de acceso a datos basadas en objetos optimizadas para las aplicaciones basadas en Internet y centradas en datos. ADO está basado en una especificación publicada y se incluye con Microsoft Internet Information Server y con Microsoft Visual InterDev.
Modelo del objeto ADO
Cada objeto conexión, comando, conjunto de registro y campos contiene además la colección propiedades.
Objeto Conexión
Métodos:
BeginTrans , Close , CommitTrans , Execute , Open , OpenSchema , RollbackTrans
Propiedades
Attributes , CommandTimeout, ConnectionString, ConnectionTimeout, CursorLocation, DefaultDatabase, IsolationLevel, Mode, Provider, State, Version
Objeto RecordSet
Métodos:
AddNew, CancelBatch, CancelUpdate, Clone, Close, Delete, GetRows, Move, MoveFirst, MoveLast, MoveNext, MovePrevious, NextRecordset, Open, Requery, Resync, Supports, Update, UpdateBatch
Propiedades
AbsolutePage, AbsolutePosition, ActiveConnection, BOF, Bookmark, CacheSize, CursorLocation, CursorType, EditMode, EOF, Filter, LockType, MarshalOptions, MaxRecords, PageCount, PageSize, RecordCount, Source, State, Status
Objeto Error
Propiedades
Description, HelpContext, HelpFile, NativeError, Number, Source, SQLState
Elementos técnicos
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
Este documento esta relacionado con la versión 2.1 de ADO.
Arquitectura tecnológica
Figura 1 : Arquitectura tecnológica
Definición: OLEDB
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.
Definición : Proveedor OLEDB u OLEDB Provider :
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.
Concretamente, los proveedores OLEDB, u OLEDB Providers son
· El proveedor OLEDB para ODBC también llamado KAGERA o MSDASQL
· El proveedor OLEDB para SQL Server, llamado SQLOLEDB
· El proveedor OLEDB para Oracle llamado MSDAORA
· El proveedor OLEDB para Jet, llamado Jolt
El modelo de objetos ADO
El esquema siguiente muestra los objetos y las relaciones existentes entre los objetos y el modelo.
Figura 2: 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.
Tabla 1: 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.
Figura 3 : 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:
Figura 4: Relaciones entre los objetos de ADO
Histórico de versiones
ADO se proporciona con MDAC que está disponible en la dirección: http://microsoft.com/data
Las versiones existentes son las siguientes:
· MDAC 1.5a
· MDAC 1.5b
· MDAC 1.5c
· MDAC 1.5d
· MDAC 2.0 ó 2.0.3002.20
· MDAC 2.0 SP1 ó 2.0.3002.23
· MDAC 2.0 SP2 ó 2.0.3002.28
· MDAC 2.1
· MDAC 2.1 SP1 ó 2.1.1.3711.11
· MDAC 2.1 SP2 ó 2.1.2.4202.3
· MDAC 2.5 actualmente en versión beta.
En MSDN, existe un artículo sobre las diferentes versiones, hasta la 2.0. Este artículo se titula:
"Redistributing Microsoft Data Access Components"
Para más información acerca de este tema, consulte el capítulo titulado "¿Cómo determinar qué versión de MDAC está instalada?" más adelante en este documento.
Las funcionalidades principales aportadas por ADO 2.x respecto de ADO 1.5 son las siguientes:
· Los eventos generados en los objetos Connection y Recordset, son los que permiten soportar los modos asíncronos. (Conexión asíncrona, ejecución de comandos en modo asíncrono y la recuperación de datos en modo asíncrono)
· Aunque es posible utilizar los recordsets de forma desconectada con ADO 1.5, no es posible guardarlos bajo la forma de archivo reutilizado en el momento de otro lanzamiento de la aplicación, por ejemplo. ADO 2.0 implementa una propiedad Persist-Format y un método Save en el objeto Recordset, lo que permite proteger en el disco un Recordset creado con la opción adLockBatchOptimistic. Esto se utiliza frecuentemente con RDS, en las aplicaciones web.
· Las funcionalidades de ordenar y buscar implementadas en el objeto Recodset.
· Posibilidad para crear algún recordset independiente: Con ADO 2.0, es posible crear un objeto Recordset, manipularlo y usarlo, independientemente de toda fuente de datos. El programador puede agregar campos a este recordset y agregar o modificar los datos
Ejemplo de código
Trabajando con el modelo de objetos
Para utilizar ADO usansdo early binding en un programa VB o VBA, deberá consultar la referencia:
Microsoft ActiveX Data Object x.x Library
eligiendo en el menú Projecto, Referencias en la interfaz de VB o en el editor VBA.
Prototipos
En MSDN, existe un artículo que se titula: "What Are the Objects in the ADO Object model" y que está disponible en la web en la dirección: http://msdn.microsoft.com/library/techart/msdn_workshp1.htm
Vamos a ver a continuación dos ejemplos para:
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 = NothingEnd 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 * from titles", "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.CloseEnd 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.CloseEnd 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.ConnectionSet cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:bd1.mdb" cn.Execute "Select * into [Excel 8.0]; Database=c:Test1.xls;Hdr=Yes].[Sheet3] From Clients" cn.Close Set cn = NothingEnd Sub ' Explorar la colección Errors.Sub ErrorExample()Dim cn As ADODB.ConnectionSet cn = New ADODB.ConnectionOn Error GoTo AdoError ' Abrir la conexión usando un DSN que no existe.cn.Open "MissingDSN", "sa", "" Exit SubAdoError: Dim Errs As ADODB.Errors Dim errLoop As ErrorDim strError As String' Bucle hasta el objeto Error en la' colección Errors y muestra las propiedades.Set Errs = cn.ErrorsFor Each errLoop In Errs Debug.Print errLoop.SQLState Debug.Print errLoop.NativeError Debug.Print errLoop.DescriptionNextEnd 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 * from authors", "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.CloseEnd 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.CloseEnd Sub
Obtener la lista de tablas de una base de datos: para conseguir información sobre la estructura de la base de datos se podrá usar el método de OpenSchema del objeto Connection (Artículo Q186246
Public Sub OpenSchemaX() Dim cnn1 As ADODB.Connection Dim rstSchema As ADODB.Recordset Dim strCnn As String Set cnn1 = New ADODB.Connection strCnn = "Provider=sqloledb;" & _ "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; " cnn1.Open strCnn Set rstSchema = cnn1.OpenSchema(adSchemaTables) Do Until rstSchema.EOF Debug.Print "Table name: " & _ rstSchema!TABLE_NAME & vbCr & _ "Table type: " & rstSchema!TABLE_TYPE & vbCr rstSchema.MoveNext LooprstSchema.Closecnn1.CloseEnd Sub
Las cadenas de conexión
En MSDN, en el artículo Q193332 titulado: "FILE:MDACCON.EXE Using Connection Strings w/ ODBC/OLEDB/ADO/RDS" se encuentran en todas las cadenas de conexión de proveedores diferentes, o drivers ODBC con o sin DSN. Este artículo está disponible en la web: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q193332.
Después de haber visto este artículo es suficiente con copiar y pegar la cadena de conexión que necesita para su aplicación.
Trucos:
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.
Figura 5: Propiedades de Data Link: pantalla 1
Figura 6: Propiedades de Data Link: pantalla 2
También puede usar esta herramienta de creación de datos en el escritorio:
· Haga Clic en el escritorio, seleccionar Nuevo Microsoft Data Link
· Haga Clic con el botón derecho sobre el objeto creado en Propiedades.
· Vea las características de la conexión, y pruébelas antes de validarlas.
· Abria Notepad, y desplácese para cambiar de sitio el objeto Microsoft Data Link creado en el escritorio en Notepad. Notepad contiene la cadena de conexión requerida.
Herramientas de depuración
A menudo, para problemas de depuración de ADO, la clásica depuración de VB no es suficiente. Algunas herramientas proporcionadas permiten disponer de las trazas de lo que sucede entre el PC cliente y el servidor.
Trazas ODBC:
Si se usa el proveedor OLEDB para ODBC , puede ser útil disponer de las trazas de ODBC. Para ello, vaya a Configuración, en el Panel de control "Fuentes de datos de datos ODBC", y en la etiqueta "Seguimiento" haga clic en el botón "Iniciar". Se puede especificar la ruta y el nombre del archivo de registro dónde se almacenarán las trazas. El fichero generado es un fichero de texto.
Figura 7: Trazas ODBC
Trazas OLEDB:
Cuando se usa ODBC, es posible poner en el lugar un sistema de trazas de ODBC, no existe una herramienta equivalente para rastrear claramente las acciones realizadas por ADO u OLEDB.
Abriendo y cerrando la conexión con un servidor SQL Server:
Existen herramientas que cumplen con el estándar de SQL Server que permite visualizar qué es lo que pasa en el servidor. SQLTrace está incluída en SQL Server 6.5, o el generador de perfiles entregado con SQL Server 7. Estas herramientas pueden usarse para visualizar las aperturas y cierres de conexiones generadas por un programa cliente; por ejemplo, uno se conecta al servidor, y crea un filtro para analizar que pasa entre el cliente y el servidor.
Análisis de tramas entre el cliente y el servidor:
Para visualizar paquetes de datos en el tránsito entre el cliente y el servidor, se puede instalar y usar una herramienta llamada Network Monitor. Una versión limitada se proporciona en Windows NT. Es suficiente con instalarla desde Configuración, en el panel de control, en donde el programa se representa con un icono llamado "Red" y en la etiqueta Servicios haga clic en el botón "Agregar" para agregar lo siguientes Servicios:
Agente y herramientas de monitor de red (Network Monitor Tools and Agent)
Una versión más completa se entrega con el producto SMS (Microsoft Systems Management Server).
Información adicional de MDAC
Instalación de MDAC
Descargar MDAC desde la dirección: http://microsoft.com/data
¿Cómo determinar qué versión de MDAC esta instalada?
De varias formas:
· Un documento acerca de las versiones anteriores (hasta la versión 2.0) está disponible en la dirección: http://www.msdn.microsoft.com/library/techart/msdn_redistmdac.htm
