sábado, 5 de julio de 2008

ADO DATA VB6

Es posible utilizar el control ADO Data para crear una aplicación que despliege, agregue y actualice datos de una base de datos, también es posible crear applicaciones que utilicen Microsoft SQL Server.

ADO es una estrategia Microsoft de interface de programación a nivel de aplicación para datos e información.

OLE DB tiene 3 componentes:

  1. Data Providers, Un Proveedor de Datos es cualquier proveedor OLE DB que posee datos y los expone en una forma tabular, ejemplos de proveedores de datos son DBMS relacionales, hojas de cálculo, sistemas de archivos y correo electrónico.
  2. Data Consumers, Los Consumidores de Datos son aplicaciones que utilizan datos que exponen los proveedores de datos, es decir, cualquier aplicación que utiliza ADO es un consumidor OLE DB.
  3. Service Components, aunque los proveedores de datos pueden suministrar alguna funcionalidad de base de datos, los servicios de componentes OLE DB realizan la funcionalidad de procesamiento y transporte de datos entre consumidores de datos y proveedores de datos, en este escenario ni la aplicación front-end (cliente) ni la back-end database (servidor) es responsable de proveer su propia funcionalidad de bases de datos, en su lugar los servicios de componentes proveen la funcionalidad que cualquier aplicación puede usar cuando acceden a datos.

Visual Basic puede acceder a todos los tipos de datos. Acceder a datos es el proceso de vista y manipulación de información que se origina en una fuente de datos externa, como Micorsoft Access, SQL Server o Exchange.

Características para Acceder a Datos

Los ActiveX Data Objects (ADO) proveen el acceso a datos e información a través de las siguientes técnicas:

  • ADO Data Control, provee la funcionalidad para acceder a datos con una cantidad de código limitado.
  • ActiveX Data Objects (ADO), proveen una completa interface de programación que proporciona el acceso a todo tipo de datos.
  • Data Form Wizard, es utilizada en conjunto con los controles ADO Data y diseñada para generar automáticamente formas Visual Basic, las cuales contienen controles individuales y procedimientos utilizados para administrar la información derivada de las tablas de bases de datos y consultas. Es posible utilizar Data Form Wizard para crear formas de consulta para administrar los datos de una tabla o consulta o formas de tipo Master/Detail utilizadas para administrar relaciones de datos uno a muchos más complejas.
  • ADO Data Environment Designer, provee un ambiente en tiempo de diseño más interactivo para cread objetos ADO, que pueden usarse como fuentes de datos para objetos data-aware sobre una forma o reporte o acceder programáticamente como métodos y propiedades.
  • Query Designer, es posible crear consultas que modifiquen una base de datos por una actualización, inserción o eliminación de renglones. Es posible crear consultas de propósito especial, por ejemplo que la consulta reciba parámetros en los cuales se proveen los valores de búsqueda cuando la consulta es ejecutada.
  • Third-Party Controls, otros controles que ofrecen opciones de conectividad a bases de datos.

Implementación de un Control de Datos ADO

Cuando se utiliza el ADO Data Control, se conecta a una base de datos y a una fuente especifica de registros dentro de la base de datos. Los registros asociados se vuelven disponibles como un recordset.

El control que se encuentra en ToolBox es un control DAO anterior, para agregar el ADO Data Control al proyecto agregue el componente Microsoft ADO Data Control 6.0(OLEDB).

Propiedad ConnectionString

La propiedad ConnectionString del ADO Data Control contiene la información utilizada para establecer una conexión a una fuente de datos.

Esta propiedad puede ser establecida en tiempo de diseño utilizando la ventana de propiedades o seleccionar el control y dar clic al botón derecho del mouse para seleccionar ADODC Properties

Cuando se establecen los valores del ConnectionString a través de la ventana de propiedades se tienen 3 opciones de conexión:

  1. Use Data Link File, especifica que se utilizará un string de conexión personalizado que conecta a la fuente de datos.
  2. Use ODBC Data Source Name, especifica que un nombre de fuente de datos definido por el sistema (DNS) es utilizado para el string de conexión.
  3. Use Connection String, especifica que se utilizará un string de conexión para acceder a los datos.

Propiedad RecordSourse

La propiedad RecordSourse puede ser una tabla inividual en la base de datos, una consulta almacenada (stored procedure) o un string de consulta que utiliza el Lenguaje de Consultas Estructurado (SQL - Structured Query Language).

Un Objeto Command es una definición especifica de un comando especifico que se intenta ejecutar contra una fuente de datos.

La propiedad RecordSourse puede establacerse en tiempo de diseño o en tiempo de ejecución adcEmpleados.RecordSource = "Empleados", donde se establace el tipo de comando que puede ser:

  • adCmdUnknown, el tipo de comando en la propiedad CommandText no es conocido. Este es el valor por default.
  • adCmdText, evalua el CommandText como una definición textual de un comando o invocación a un stored procedure.
  • adCmdTable, evalua el CommandText como un nombre de tabla donde se regresan todas las columnas por una consulta SQL generada internamente.
  • adCmdStoredProc, evalua el CommandText como un nombre de stored procedure.

Víncular un Control

Una vez que se establecen las propiedades ConnectionString y RecordSource para el ADO Data Control, es posible agregar un vínculo de control para desplegar datos en la forma.

Un bound control es uno que es "data-aware" (DBCombo, DBList, MSFlexGrid, OLE Control, RichTextBox, DBGrid), cuando un ADO Data Control se mueve al siguiente registro por medio de código o cuando el usuario da clic a la flechas de control del ADO Data, todos los controles vínculados son conectados al cambio del ADO Data Control para desplegar datos de los campos en el registro actual. Adicionalmente si el usuario cambia los datos en el bound control, estos cambios son automáticamente enviados a la base de datos y el usuario se mueve a otro registro. Sólo un registro de información puede ser editado y actualizado a la vez, el cual es el registro actual.

Propiedades DataSource y DataField

Es necesario establecer las propiedades DataSource y DataField del bound control.

La propiedad DataSource especifica el ADO Data Control a través del cual el control es vínculado a la base de datos, se establece usualmente en tiempo de diseño a través de la ventana de propiedades, si se desea establace en tiempo de ejecución es necesario utilizar la palabra reservada Set porque la propiedad DataSource es un objeto.

La propiedad DataField indica cuales campos son desplegados en el bound control, se puede establecer esta propiedad en tiempo de diseño o ejecución.

Por ejemplo para establecer las propiedades en tiempo de ejecución:

   adcEmpleados.RecordSource = "SELECT nombreEmpleado FROM Empleados"
Set txtNombre.DataSource = adcEmpleados
txtNombre.DataField = "valor"

Nuevos Controles Data-Aware

Existen nuevos controles ActiveX, diseñados especificamente para ver y editar datos:

  • DataGrid, control que puede trabajar con ADO Data Control
  • DataList, este control funciona exactamente como el control DBList, pero está optimizado para usarlo con datos OLE DB.
  • DataCombo, funciona como el vontrol DBCombo, pero pueder utilizarse con fuentes de datos OLE DB.
  • Hierarchical FlexGrid, presentan datos recordset de una o más tablas en un formato grid.
  • DataRepeater, permite utilizar un control de usuario para desplegar datos y repetir el control para múltiples vistas.
  • MonthView, despliega fechas gráficamene como calendario.
  • DateTimePicker, despliega fechas en cajas de texto, al dar clic al texto causa que se presente un calandario gráfico para seleccionar la nueva fecha.

Propiedades Data Binding

Los controles intrínsecos y muchos controles ActiveX, tienen propiedades de datos especificas asociadas. Las propiedades utilizadas para el Data Binding incluyen:

  • DataSource, regresa o establece el valor de la fuente de datos para un control.
  • DataMember, regresa o establece el valor del dato especificado dentro de la fuente a utilizar. Permite especificar que conjuntos de datos utilizar.
  • DataField, regresa o establace el valor del campo especifico para víncular un control.
  • DataFormat, permite definir el formato automático de datos como serán recuperados desde la fuente de datos.

Recordset

El ADO Data Control tiene una propiedad llamada Recordset la cual es un grupo de registros, en si es un objeto y tiene sus propias propiedades y métodos.

Para recuperar un conjunto de registros, se establece la propiedad RecordSource del ADO Data Control, la cual es un string que puede ser una consulta o nombre de tabla dentro de la base de datos desde la cual se obtienen los registros.

El objeto Recordset tiene las propiedades BOF y EOF que indican si se está al inicio o al final del Recordset, si no se obtuvieron registros el valor de ambas propiedades es True.

Para actualizar el registro actual se utiliza el método Update, por ejemplo:

adcEmpleados.Recordset.Update

Para cancelar cualquier cambio realizado al registro actual o si se agrego un nuevo registro antes de invocar al método Update se emplea el método CancelUpdate:

adcEmpleados.Recordset.CancelUpdate

Para agregar nuevos registros a un Recordset se invoca el método AddNew:

adcEmpleados.Recordset.addNew

El método AddNew inicializa el bound control y el nuevo registro se convierte en el registro actual, si se invoca el método AddNew mientras se edita otro registro ADO automáticamente invoca el método Update para almacenar cualquier cambio y entonces crear un nuevo registro.

Para eliminar el registro actual o grupo de registros en un recordset se utiliza el método Delete, el cual tiene el parámetro AffectRecords que es utilizado para establecer cuantos registros se podrian afectar.

El parámetro AffectRecords puede tener 2 posibles valores:

  1. adAffectCurrent, elimina sólo el registro actual y es la opción por default.
  2. adAffectGroup, esta opción se utiliza para eliminar todos los registrso que satisfagan el filtro actual, por lo que es necesario establacer la propiedad Filter antes de utilizar esta opción.

Recuperar valores de campos de registros eliminados, genera un error, después de eliminar el registro actual permanece hasta que se mueva a un registro diferente, una vez que se mueve a otro registro, el registro eliminado no es accesible.

adcEmpleados.Recordset.delete AffectRecords

Es posible utilizar la propiedad EOF para saber si se elimino el último registro, si es True moverse al último registro del recordset a través del método MoveLast.

Para buscar en un recordset existente un registro que satisfaga el criterio especificado, agregue la característica de búsqueda a la aplicación a través del uso del método Find, si el criterio coincidio con un registro, el recordset se posiciona en ese registro o si no encuentra coincidencias se posiciona al final del recordset (EOF).

El método Find tiene un parámetro requerido el cual es el criterio de búsqueda y 3 parámetros opcionales, SkipRows, SearchDirection y Start.

El parámetro Criteria es un string que contiene la sentencia que especifica el nombre de columna, operador de comparación (>, <, =, like) y el valor para ser usado en la búsqueda, ejemplo:

  1. SkipRows, valor opcional Long, el cual por default tiene el valor 0, es utilizado para especificar si inicia la búsqueda desde el registro actual o desde el bookmark.
  2. searchDirection, valor opcional que especifica cuando la búsqueda debería comenzar sobre el registro actual o el siguiente registro disponible, la búsqueda termina al encontrar el inicio o final del recordset, dependiendo la dirección de búsqueda, la cual puede ser: adSearchForward (0), AdSearchBackward (1).
  3. start, valor opcional Variant bookmark para utilizarlo como la posición de inicio de la búsqueda, puede ser un bookmark o alguno de los siguientes valores: adBookmarkCurrent (0) bookmark actual, adBookmarkFirst (1) primer registro, adBookmarkLast (2) último registro.

adcEmpleados.Find "Nivel = PA"

adcEmpleados.Find "Nivel LIKE 'P%'"

Cuando se realiza una búsqueda de registros utilizando el método Find, se pueden emplear las propiedades EOF y BOF del objeto Recordset para determinar cuando un registro en particular fué encontrado.

Si la búsqueda falla, es decir, no encuentra el registro, se debe regresar al registro donde la búsqueda comenzo:

   If adcEmpleados.EOF Or adcEmpleado.BOF Then
adcEmpleados.bookmark = varBookmark
End If

Se recurre al uso de la propiedad bookmark para dejar una marca y saber en que registro comenzo la búsqueda.

2 comentarios:

Anónimo dijo...

gracias amigo buen tema .... te quieria preguntar si es que eso es toda la info para el control ado , Gracias

Jonathan dijo...

Hola Que tal,

Pues seguramente existe mucha mas información pero de momento es todo lo que tengo publicado.

Espero te sea de ayuda.
Saludos!