El modelo de acceso a datos ADO

Anuncio
El modelo de acceso a datos ADO
1. Presentación
La biblioteca de objetos ADO (ActiveX Data Objects) le permite escribir una aplicación que accede a datos situados en un servidor de bases de datos y manejar éstas mediante un proveedor OLE DB. ADO tiene la ventaja de ser fácil de usar, con buen rendimiento y usando poca memoria y espacio de disco. ADO ofrece las funcionalidades básicas que permiten crear aplicaciones cliente/servidor y aplicaciones Web. Para poder utilizar la biblioteca de objetos ADO, es necesario seleccionar la referencia Microsoft ActiveX Data Objects 6.0 Library en la lista de referencias a las bibliotecas de objetos. Si esta referencia no está disponible, debe seleccionar el archivo MSADO15.dll mediante el botón de comando Examinar. Generalmente, este archivo está ubicado en el directorio C:\Archivos de programa\Common Files\System\ADO. Igualmente puede utilizar las extensiones ADO seleccionando la referencia Microsoft ADO Ext 6.0 for DLL and Security (archivo MSADOX.DLL). Estas extensiones le permiten acceder a objetos complementarios (catalgo, users, views…) del modelo ADO. El archivo de ayuda ADO210.chm ubicado en el directorio C:\Archivos de Programa\Common Files\MicrosoftShared\Office 15\1036, le permite obtener información detallada sobre la utilización de los modelos ADO. 2. ADO y OLE DB
OLE DB es una tecnología que permite un acceso uniforme a los datos almacenados en diversas fuentes de información: bases de datos relacionales o no relacionales, correo, sistemas de archivos… Prácticamente todos los datos de la empresa son accesibles mediante OLE DB. ADO (ActiveX Data Objects) es la interfaz de programación utilizada para acceder a los datos de todos los proveedores de datos OLE DB. Arquitectura tecnológica © Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
- 1-
Los proveedores de datos o Providers son controladores que permiten comunicar con los orígenes de datos. 3. Jerarquía de los objetos ADO
- 2-
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
4. Modelo de base de programación ADO
ADO le permite ejecutar la siguiente secuencia de acciones: l
establecer una conexión a una base de datos OLE DB o ODBC por medio del objeto Connection, l
crear un comando que permita enviar una consulta SQL al servidor utilizando el objeto Command, l
ejecutar el comando. Si el comando devuelve filas, almacenarlas en un objeto Recordset, l
utilizar los datos del objeto Recordset: ordenar, filtrar, modificar, eliminar los registros, l
actualizar los datos: validar los eventuales cambios del objeto Recordset, incorporar las actualizaciones en una © Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
- 3-
transacción, l
si se ha utilizado una transacción: aceptar o desechar las actualizaciones aportadas durante ésta. Ejemplo Dim cnn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
’ Etapa 1: establecer una conexión a un origen de datos
’ SQL Server mediante la tecnología OLEDB
cnn.Open "Provider=SQLOLEDB.1;Data Source=SRV; _
& "Initial Catalog=Presupuesto;" _
& "Integrated Security=SSPI;Persist Security Info=False;"
’ Etapa 2: crear un comando
Set cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * FROM Clientes"
’
Etapa 3: ejecutar el comando
rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenStatic, adLockBatchOptimistic
’
Etapa 4 : manipular los datos
rs.Filter = "CLI_CIUDAD LIKE ’Barcelona’"
Do While Not rs.EOF
rs("CLI_PAÍS") = "E"
rs.MoveNext
Loop
’
Etapa 5: actualizar los datos modificados
cnn.BeginTrans
rs.UpdateBatch
’
Etapa 6: terminar la actualización de la base SQL
If MsgBox("¿Desea confirmar las actualizaciones?", _
vbYesNo) = vbYes Then
cnn.CommitTrans
Else
cnn.RollbackTrans
End If
5. Descripción de los objetos ADO
- 4-
Connection Representa una conexión con un origen de datos. Command Define un comando específico que debe ejecutarse sobre un origen de datos. © Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
Recordset Representa el conjunto de registros completo de una tabla de bases de datos o los resultados de un comando (ej: resultados de una consulta SQL). Record Funciona esencialmente como un objeto Recordset de una sola línea. El origen de los datos en un objeto Record puede ser un comando que devuelve una línea de datos a partir del servidor. La utilización de objetos Record en lugar de Recordset para recibir los resultados de una consulta que devuelve una sola línea de datos elimina el exceso de tratamiento vinculado a la instanciación del objeto Recordset, que es más complejo. Stream Proporciona el medio para leer, escribir y gestionar un flujo de bytes formado por texto o datos binarios. 6. Las colecciones ADO
Parameters Colección de todos los objetos Parameter de un objeto Command. El objeto Parameter representa un parámetro o argumento asociado a un objeto Command basado en una consulta con parámetros o un procedimiento almacenado con parámetros. Properties Colección de todos los objetos Property para un objeto determinado (Connection, Command, Recordset). El objeto Property representa una característica dinámica de un objeto ADO definido por el usuario. Errors Colección de todos los objetos Error creados en respuesta a un error único vinculado al proveedor OLE DB. El objeto Error contiene informaciones relativas a un error de acceso a los datos. Fields Colección de todos los objetos Field correspondientes a una columna (o campo) de un objeto Recordset. 7. Los objetos Connection
Métodos BeginTrans Empieza una nueva transacción. Cancel Interrumpe y anula la ejecución de una consulta iniciada en modo asíncrono mediante los métodos Execute u Open. Close Cierra una conexión abierta, así como todos los objetos que dependen de ésta. CommitTrans Guarda los cambios efectuados a los datos y detiene la transacción en curso. Execute Ejecuta la consulta, la instrucción SQL, el procedimiento almacenado o el texto propio del proveedor OLE DB. Open Abre una conexión a un origen de datos para poder ejecutar comandos. OpenSchema Obtiene informaciones procedentes del proveedor OLE DB, relativas al esquema de la base de datos. RollbackTrans Anula los cambios realizados a los datos durante la transacción en curso y detiene esta última. Propiedades Attributes Define o devuelve una o varias características de un objeto Connection. El valor por defecto es cero. CommandTimeout Indica el intervalo de espera, en segundos, que debe respetarse al intentar la ejecución de un comando, antes de interrumpir el intento y generar un © Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
- 5-
mensaje de error. El valor por defecto es 30. ConnectionString Define o devuelve la información utilizada para establecer una conexión con el origen de datos. ConnectionTimeout Indica el intervalo de tiempo, en segundos, que debe respetarse al intentar una conexión, antes de abortarla y generar un mensaje de error. El valor por defecto es 15. CursorLocation Define o devuelve el tipo de cursor que debe emplearse por defecto para esta conexión (cursor del lado cliente o cursor del lado servidor). DefaultDatabase Indica la base de datos por defecto de un objeto Connection. IsolationLevel Indica el nivel de aislamiento de un objeto Connection. Mode Indica los permisos de modificación de datos de un objeto Connection. Provider Indica el nombre del proveedor OLE DB del objeto Connection. State Indica si el objeto Connection está abierto o cerrado. Sólo lectura. Version Indica el número de versión ADO. Sólo lectura. Ejemplo Creación de una referencia sobre la base de datos actual. Dim cncPresupuesto as ADODB.Connection
Set cncPresupuesto = CurrentProject.Connection
Apertura de una base de datos externa. Dim cncPresupuesto as ADODB.Connection
cncPresupuesto.Open "Provider=Microsoft.ACE.OLEDB.15.0.;" _
& "Data Source = C:\Presupuesto\Presupuesto.accdb";
Utilización de los métodos CommitTrans y RollbackTrans para confirmar o anular la actualización de registros. Dim cnc As ADODB.Connection
Dim strSQL As String
Dim strMessage As String
’
Abre la conexión.
Set cnc = CurrentProject.Connection
’
Inicio de la transacción
cnc.BeginTrans
’
Consultas SQL de actualización
strSQL = "UPDATE CLIENTES SET CLI_PAIS = ’España’" _
& "WHERE CLI_CIUDAD = ’Madrid’"
cnc.Execute strSQL
strSQL = "UPDATE CLIENTES SET CLI_PAIS = ’Francia’" _
& "WHERE CLI_CIUDAD = ’París’"
cnc.Execute strSQL
- 6-
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
’
Pregunta al usuario si desea validar las actualizaciones
If MsgBox("¿Desea confirmar la actualización de los países?", vbYesNo) _
= vbYes Then
’
Guarda los cambios
cnc.CommitTrans
Else
’
Anula los cambios
cnc.RollbackTrans
End If
8. Los objetos Command
Métodos Cancel Interrumpe y cancela la ejecución de una consulta iniciada en modo asíncrono mediante el método Execute. CreateParameter Crea un nuevo objeto Parameter y especifica sus propiedades. Execute Ejecuta la consulta, la instrucción SQL o el procedimiento almacenado especificado mediante la propiedad CommandText. Propiedades ActiveConnection Indica el objeto Connection al que está asociado el comando. CommandText Contiene el texto del comando que debe enviarse al proveedor OLE DB. CommandTimeout Indica el intervalo de tiempo (en segundos) que debe respetarse al intentar la ejecución del comando, antes de interrumpir el intento y generar un mensaje de error. El valor por defecto es 30. CommandType Indica el tipo del objeto Command. Name Indica el nombre del objeto Command. Prepared Indica si es necesario guardar una versión compilada del comando en el servidor antes de la ejecución. State Indica si el objeto Command está abierto o cerrado. En sólo lectura. Ejemplo Utilización del objeto Command para crear un conjunto de registros. Dim cnc As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
’
Abre la conexión
cnc.Open "Provider=Microsoft.ACE.OLEDB.15.0.;" _
& "Data Source = C:\Presupuesto\Presupuesto.accdb;PersistSecurity
Info=False"
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
- 7-
’
Ejecuta el comando Select
Set cmd.ActiveConnection = cnc
cmd.CommandType = adCmdText
cmd.CommandText = "SELECT * FROM CLIENTES WHERE" _
& " CLI_CIUDAD = ’Madrid’"
Set rst = cmd.Execute
’
Muestra el nombre de la empresa
’
en la ventana Inmediato
Do While Not rst.EOF
Debug.Print rst("CLI_EMPRESA")
rst.MoveNext
Loop
rst.Close
cnc.Close
9. Los objetos Recordset
Métodos AddNew Crea un nuevo registro para un objeto Recordset que pueda actualizarse. Cancel Cancela la ejecución de una operación Open asíncrona en espera. CancelBatch Cancela una actualización por lotes en espera. CancelUpdate Cancela todas las modificaciones aportadas al registro actual o a un nuevo registro antes de llamar al método Update. Clone Crea un objeto Recordset duplicado a partir de un objeto Recordset existente. Close Cierra el objeto Recordset abierto, así como todos los objetos que dependen de éste. CompareBookmarks Compara dos marcadores y devuelve un valor que indica sus posiciones relativas. Delete Elimina el registro actual o un grupo de registros. Find Busca en un objeto Recordset el registro correspondiente a criterios específicos. GetRows Extrae varios registros de un objeto Recordset y los coloca en una matriz. GetString Devuelve un objeto Recordset en forma de cadena. Move Desplaza la posición del registro actual en un objeto Recordset. MoveFirst Desplaza la posición del registro actual hasta el primer registro del objeto Recordset. MoveLast Desplaza la posición del registro actual hasta el último registro del objeto Recordset. MoveNext Desplaza la posición del registro actual hasta el registro siguiente del objeto Recordset. MovePrevious Desplaza la posición del registro actual hasta el registro anterior del objeto Recordset. NextRecordset Devuelve el conjunto de registros siguiente en el caso de que un comando conlleve varias consultas de selección. - 8-
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
Open Abre un cursor que representa los registros de una tabla o los resultados de una consulta. Requery Actualiza los datos de un objeto Recordset volviendo a ejecutar la consulta en la que se basa el objeto. Resync Actualiza los datos del objeto Recordset en curso a partir de la base de datos subyacente. Save Guarda el objeto Recordset en un archivo. Seek Busca en el índice de un objeto Recordset un registro correspondiente a un valor y reemplaza el registro actual por el registro encontrado. Supports Determina si un objeto Recordset soporta un tipo de funcionalidad particular. Update Guarda los cambios aportados al registro actual del objeto Recordset. UpdateBatch Guarda en el disco todas las actualizaciones por lotes en espera. Propiedades AbsolutePage Indica la página del registro actual. AbsolutePosition Indica la posición ordinal del registro actual dentro de un objeto Recordset. ActiveCommand Indica el objeto Command que ha creado el objeto Recordset correspondiente. Sólo lectura. ActiveConnection Indica a qué objeto Connection pertenece el objeto Recordset. BOF Indica si el puntero de registro está posicionado antes del primer registro del objeto Recordset. Sólo lectura. Bookmark Devuelve un marcador que identifica de manera única el registro actual en el objeto Recordset o desplaza el registro actual a un registro identificado por un marcador válido. CacheSize Indica el número de registros de un objeto Recordset almacenado en memoria caché. CursorLocation Define o devuelve el tipo de cursor por defecto para esta conexión (cursor lado cliente o cursor lado servidor). CursorType Indica el tipo de cursor utilizado para este objeto Recordset. DataMember Indica el nombre del miembro de datos que debe extraerse del objeto definido por la propiedad DataSource. Sólo lectura. DataSource Indica que un objeto que contiene datos debe representarse como objeto Recordset. Sólo lectura. EditMode Indica el estado de modificación del registro actual. Sólo lectura. EOF Indica si el puntero de registro está posicionado después del último registro en el objeto Recordset. Sólo lectura. Filter Define un filtro de datos en el Recordset. Index Indica el nombre del índice actual para el Recordset. LockType Indica el tipo de bloqueo de los registros durante las modificaciones. MarshalOptions Indica qué registros se devuelven al servidor. MaxRecords Indica el número máximo de registros que se devuelven a un objeto Recordset desde una misma consulta. El valor por defecto es cero (no hay límite). PageCount Indica el número de páginas de datos contenidas en el objeto Recordset. Sólo lectura. PageSize Indica el número de registros contenidos en una página del Recordset. Properties Referencia a la Colección de los objetos Property del objeto Recordset actual. © Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
- 9-
RecordCount Indica el número de registros en el objeto Recordset. Sólo lectura. Sort Especifica uno o varios nombres de campos según los cuales se ordena el objeto Recordset, y determina el criterio de ordenación de cada campo. Source Indica el origen de los datos de un objeto Recordset. State Indica el estado del Recordset: abierto, cerrado u operación asíncrona en curso. Sólo lectura. Status Indica el estado del registro actual correspondiente a las actualizaciones por lotes u otras operaciones globales. Sólo lectura. StayInSync Indica, en un objeto Recordset jerárquico, si la fila principal debe cambiar cuando cambia el conjunto de los registros secundarios subyacentes. Sólo lectura. Ejemplo Transformación en mayúsculas de los caracteres del campo Cli_Empresa en la tabla Clientes. Dim cnc As New ADODB.Connection
Dim rstCli As New ADODB.Recordset
’ Creación del Recordset
Set cnc = CurrentProject.Connection
rstCli.Open "Select from Clientes", cnc, _
adOpenKeyset, adLockOptimistic
’ Recorrido de los registros
With rstCli
Do Until .EOF
rstCli("Cli_Empresa") = _
UCase(rstCli("Cli_Empresa"))
’ Actualización
.Update
’ Registro siguiente
.MoveNext
Loop
End With
rstCli.Close
cnc.Close
Utilización del método Seek: búsqueda de un cliente a partir de su código. Dim cnc As New ADODB.Connection
Dim rstCli As New ADODB.Recordset
Dim strCodigoCli As String
’
Creación del Recordset
Set cnc = CurrentProject.Connection
rstCli.Open "Clientes", cnc, adOpenKeyset, _
adLockReadOnly, adCmdTableDirect
With rstCli
’
Entrada del código cliente
strCodigoCli = _
- 10 -
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
InputBox("Introduzca el código cliente")
’
Índice actual: clave primaria
.Index = "PrimaryKey"
’
Búsqueda
.Seek strCodigoCli, adSeekFirstEQ
’
Registro no encontrado
If .EOF Then
MsgBox "Cliente no encontrado"
Else
’
Registro encontrado
MsgBox "Empresa: " & rstCli("Cli_Empresa")
End If
End With
rstCli.Close
cnc.Close
Utilización del método Find: búsqueda de los clientes cuyo nombre de Empresa empiece por un valor determinado. Dim cnc As New ADODB.Connection
Dim rstCli As New ADODB.Recordset
Dim strEmp As String
Dim strCrit As String
Dim bkm As Variant
’
Creación del Recordset
Set cnc = CurrentProject.Connection
rstCli.Open "Clientes", cnc, adOpenKeyset, _
adLockReadOnly, adCmdTableDirect
With rstCli
’
Entrada del código cliente
strEmp = InputBox("Introduzca las primeras "_
& "letras de la Empresa")
’
Búsqueda
strCrit = "Cli_Empresa Like ’" & strEmp & "%’"
.Find strCrit, , adSearchForward
’
Registro no encontrado
If .EOF Then
MsgBox "Cliente no encontrado"
Else
’
Si encuentra: búsqueda de los siguientes
Do While Not .EOF
MsgBox rstCli("Cli_Empresa")
’
Posición actual
bkm = .Bookmark
.Find strCrit, 1, adSearchForward, bkm
Loop
End If
End With
rstCli.Close
cnc.close
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
- 11 -
10. La colección Fields
Métodos Append Agrega un objeto Field a una colección Fields. Delete Elimina un objeto Field de la colección Fields. Refresh Actualiza los objetos Field en la colección Fields. 11. Los objetos Field
Métodos AppendChunk Agrega datos a un objeto Field de tipo binario o de gran tamaño. GetChunk Devuelve todo o parte del contenido de un objeto Field de tipo binario o de gran tamaño. Propiedades ActualSize Indica la longitud del valor de un campo. Sólo lectura. Attributes Indica una o varias características de un objeto Field. DefinedSize Indica el tamaño del objeto Field. Sólo lectura. Name Indica el nombre del objeto Field. NumericScale Indica la escala de los valores numéricos del objeto Field. Sólo lectura. OriginalValue Indica el valor del objeto Field antes de la modificación. Sólo lectura. Precision Indica el grado de precisión de los valores de tipo numérico en el objeto Field. Sólo lectura. Properties Contiene todos los objetos Property de un objeto Field. Type Indica el tipo de datos del objeto Field. UnderlyingValue Indica el valor actual del objeto Field en la base de datos. Sólo lectura. Value Indica el valor del objeto Field. 12. La colección Parameters
Métodos Append Agrega un objeto Parameter a la colección Parameters. Delete Elimina un objeto Parameter de la colección Parameters. Refresh Actualiza los objetos Parameter en la colección Parameters. Ejemplo Muestra la lista de todos los campos (nombre y tipo) de la tabla Clientes en la ventana Inmediato. - 12 -
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
Dim cnc As New ADODB.Connection
Dim rstCli As New ADODB.Recordset
Dim fld As ADODB.Field
’
Creación del Recordset
Set cnc = CurrentProject.Connection
rstCli.Open "Empleados", cnc, adOpenKeyset, adLockReadOnly, _
adCmdTableDirect
For Each fld In rstCli.Fields
Debug.Print fld.Name & " " & fld.Type
Next
rstCli.close
13. Los objetos Parameter
Métodos AppendChunk Agrega datos a un objeto Parameter de tipo binario o texto de gran tamaño. Propiedades Attributes Indica una o varias características de un objeto Parameter. Direction Indica si el objeto Parameter corresponde a un parámetro de entrada, de salida, o ambos, o si el parámetro es el tipo de retorno de un procedimiento almacenado. Name Indica el nombre del objeto Parameter. NumericScale Indica la escala de los valores numéricos del objeto Parameter. Precision Indica el grado de precisión de los valores de tipo Numeric del objeto Parameter. Properties Contiene todos los objetos Property de un objeto Parameter. Size Indica el tamaño máximo, en bytes o en caracteres, de un objeto Parameter. Type Indica el tipo de datos del objeto Parameter. Value Indica el valor atribuido al objeto Parameter. 14. La colección Properties
Métodos Refresh Actualiza los objetos Property en la colección Properties a partir de las informaciones del proveedor. 15. Los objetos Property
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
- 13 -
Propiedades Attributes Indica una o varias características de un objeto Property. Name Indica el nombre del objeto Property. En sólo lectura. Type Indica el tipo de datos del objeto Property. Value Indica el valor del objeto Property. 16. La colección Errors
Métodos Clear Elimina el conjunto de los objetos Error de la colección Errors. Refresh Actualiza los objetos Error a partir de las informaciones del proveedor OLE DB. Propiedades Count Indica el número de objetos Error de la colección Errors. En sólo lectura. Item Permite la indexación de la colección Errors para referenciar a un objeto Error específico. Sólo lectura. 17. Los objetos Error
Propiedades Description Devuelve la cadena descriptiva asociada al objeto Error. Sólo lectura. HelpContext Indica el ContextID del archivo de ayuda asociado al objeto Error. Sólo lectura. HelpFile Indica el nombre del archivo de ayuda asociado al objeto Error. Sólo lectura. NativeError Indica el código de error específico del proveedor asociado al objeto Error. Sólo lectura. Number Indica el número que identifica de manera única el error del objeto Error. Sólo lectura. Source Indica el nombre del objeto o de la aplicación que originó el error. Sólo lectura. SQLState Indica el valor devuelto por el proveedor OLE DB. Cadena de cinco caracteres conforme a la norma SQL ANSI. Sólo lectura. - 14 -
© Editions ENI – Tous droits réservés – Copie personnelle de jose rodriguez
Descargar