lunes, julio 28, 2008

Acceso a Datos con Xailer Parte II, Los DataSets

En el post anterior aprendimos a ubicar DONDE están los datos que queremos manipular con Xailer, usando los DATASOURCES.

En esta segunda entrega estudiaremos como obtener los datos para nuestros programas, usando los componentes DATASETs de Xailer.

Los DATASETs son la joya de la corona del sistema de datacontrols de Xailer, y su funcionamiento engloba las 3 operaciones mas importantes del manejo de datos:
  1. Obtiene los datos que desesamos manipular que pueden provenir de una tabla DBF completa, una tabla SQL, de un arreglo (array) en memoria, del resultado de un Query SQL sobre una o varias tablas o bien como resultado de un proceso almacenado de una base de datos SQL.
  2. Nos proporciona información sobre los datos obtenidos: por ejemplo cuantos registros tiene el DATASET, cuantos campos lo integran, que nombre tienen, de que tipo y tamaño son, etc.
  3. El DATASET ofrece un conjunto de métodos estandarizados para realizar desplazamiento sobre los datos y labores de mantenimiento de los mismos, es decir, las operaciones de Altas, Modificación y Borrado de registros se realizan usando las mismas instrucciones sin importar si los datos provienen de un DBF, de un SQL o bien de una matriz o array en memoria.
Cómo funciona un DATASET:

Los DATASETS como los DataSources son controles que están definidos en la barra de herramientas de Xailer:




Los DATASETS son:
  • DBF - aplicables a los DataSources CDX, NTX y ADS
  • SQL - Este DATASET obtiene una tabla completa, equivale a hacer un SELECT * sobre una tabla SQL, se aplica a los DataSources ADO en las versiones PRO y a los DataSets SQLite y MySQL en las versiones ENTERPRISE. No aplica sobre los ODBC ya que estos DataSet tienen un tratamiento distinto (veáse ODBC al final de este párrafo)
  • SQL? - Se aplica sobre DataSources ADO, SQLite y MySQL a diferencia del anterior, que obtiene todos los datos de una tabla completa, en este DATASET podemos indicar un Query SQL para obtener datos de distintas tablas, ordenados bajo distintos criterios.
  • MEM -Este es un DATASET especial que no requiere de DataSoruce se utiliza para manejar los datos contenidos en un Arreglo (Matriz) como si los disintos elementos del array fuesen una tabla de datos.
  • ODBC - Este es un DATASET especial que solo opera sobre los DataSources ODBC, la razón de esto es porque a diferencia de los DATASETS ADO, SQLite y MySQL, donde el muestreo de datos se realiza directemente sobre un cursor resultado de un Query, este DATASET crea un DBF temporal en el equipo local donde se vuelcan todos los datos obtenidos. Esto debido a la limitación de la arquitectura ODBC donde SIEMPRE es requerida un área de almacenamiento temporal. Este DATASET se incluye por compatiblidad aunque se recomienda siempre trabajar con ADO.

Para utilizarlos, al igual que que los DataSources bastará con tomarlos de la barra y ponerlos dentro de nuestro formulario, muy importante: el DataSource debe de existir ANTES de agregar el DATASET, aunque esto no es indispensable.

Una vez colocado el DATASET en nuestro formulario, y si queremos obtener ventaja de la programación visual de Xailer, lo que debemos hacer inmediatamente después de agregar el DATASET es "engancharlo" con el DataSource correspondiente, esto se hace directamente en la ventana del Inspector de objetos:



En la imagen anterior estamos asignado un DATASET para trabajar con una tabla DBF con índices CDX, una vez establecido el DataSource los siguientes pasos son simples: Poner el nombre del DBF en la propiedad cName y poner la propiedad lOpen en .T.

Aunque hacer esto no es indispensable, es ENORMEMENTE UTIL ya que con estas operaciones estamos indicando al IDE de Xailer el nombre de la tabla DBF y le indicamos ¡¡¡ QUE ABRA LA TABLA EN TIEMPO DE DISEÑO !!! ¿para qué ?, pues para tener acceso a los datos REALES mientras diseñamos nuestro formulario, como veremos en la proxima entrega, el tener abierto el DATASET nos facilitará el diseño de formularios, por ejemplo para diseñar un DBBrowse no tendremos que escribir código, sino que visualmente podremos ver que columnas queremos que tenga el browse, agregar columnas calculadas, fijar los anchos de las columns, presentación, etc. esta poderosa característica del IDE de Xailer te ahorra HORAS de programación "adivinando" como va a quedar un formulario, ya que tu formulario queda perfectamente ajustado a los datos que estás manejando.

Veamos ahora un ejemplo con un DATASET para una tabla SQL, al asignar la propiedad DataSource en el inspector de propiedades:



Al hacer la asginación del DataSource AUTOMATICAMENTE aparece un combo en la propiedad cTableName con TODAS las tablas que estén disponibles en la base de datos, Xailer se encarga de todo, se conecta con la base de datos, trae la lista de tablas disponibles, y ¡ voila !, tu simplemente escojes con que tabla trabajar, deja el trabajo sucio para Xailer, tu tienes cosas mas importantes que hacer que preocuparte por el tema de conectarte con la base de datos.

Los DataSets para SQL ofrecen una enorme versatilidad, como lo muestra el DATASET para Query, la siguiente imagen te muestra como se asgina una instrucción SQL desde tiempo de diseño para obtener los datos ordenados bajo determinado criterio:



En el inspector de objetos de DATASET para Query, aparece la propiedad cSelect, si das click sobre la propiedad podrás acceder a un pequeño editor de textos que te permitirá escribir la sentencia SQL correspondiente, nuevamente marcando la propiedad lOpen en .T. tendrás abierto el resultado del query SQL para usarlo posteriormente en tiempo de diseño.

Finalmente, el MEMDATASET, como comentamos anteriormente, este DATASET se utiliza cuando queremos tratar matrices (arrays bidimensionales) como si fueran tablas de datos, ya que los DATASETS establecen un conjunto de instrucciones comunes para manejar datos, es una buena idea usar estos mismos cuando queremos editar el contenido de un array, sus propiedades son muy simples, ya que carece de DataSource:



Si no hay DataSource, ¿ de donde vienen los datos ?, pues se asigna en tiempo de ejecución mediante el método OPEN(), esto se puede hacer en el evento :OnInitialize del formulario, hariamos algo como esto:

aDatos := {}
AADD(aDatos,{"Rene", "Flores",41})
AADD(aDatos,{"Yisel", "Flores",34})
AADD(aDatos,{"Alejandra", "Mejía",35})
AADD(aDatos,{"Niko", "Del Pozo",42})

aTitulos := {"Nombre","Apellido","Edad")

::oMemDataSet:Open(aDatos,aTitulos)

Y a partir de este momento, el MemDataSet se comporta como si fuese una tabla de datos, compartiendo métodos con los DATASETs que son para tablas de datos reales. Estupenda idea ¿ no crees ?.


DATAFIELD : Datos acerca de los datos

Al momento de relacionar el DATASET con el DataSource y al indicarlo como "abierto" (Propiedad lOpen en .T.), en ese momento se crea un arreglo de elementos IMPORTANTISIMOS dentro de la tecnología de DataControls: DATAFIELDS.

Cuando "abrimos" un DATASET, sin importar que tipo de datos estemos usando, DBF ó SQL, este obtiene información sobre TODOS LOS CAMPOS que integran el DATASET, un dataset contiene una propiedad llamada aFields, un array de objetos DATAFIELDS que nos muestra información sobre cada uno de lo campos de nuestro DATASET, la siguiente figura te muestra el depurador de Xailer mostrando los DATAFIELDS de un DATASET de una tabla ACCESS:



El mantenimiento de Datos con DATASETs:

El DATASET de Xailer ofrece un conjunto de propiedades, todas ellas comunes a los DBF y los SQL que te perminten la manipulacion de los datos, no importa que provengan de una tabla DBF o de una tabla SQL o de un Query SQL, los métodos son LOS MISMOS, lo cual facilita enormemente moverte de formato de datos.

Si haz usado objetos Database de FiveWin, estarás familiarizado con el uso de los campos como propiedades del objeto database. En Xailer ocurre algo similar, una vez que tienes tu DATASET conectado con tu DATASOURCE, entonces, el DATASET crea propiedades dinamicas con los nombres de los campos de tu tabla, sea un DBF o un SQL, de tal forma que puedes hacer cosas como esta:

xValor := ::oDataSet:Campo
xValor2 := ::oDataSet:Campo
cNombre:= ::oDAtaSet:NomEmp

El DATASET tiene además propiedades de movimiento como por ejemplo: GoTop(), GoBottom(), BOF(), EOF(), que te permiten posicionarte en determinados registros del DATASET, al mismo tiempo que te vas desplazando sobre el DATASET, los valores de las propiedades con el nombre se campo también se van actualizando, esto quiere decir que puedes usar estas propiedades como variables temporales, por ejemplo para edición de datos en un formulario, pero eso materia del siguiente artículo, volveremos a ello en la siguiente entrega.

Como mencioné anteriormente, el mantenimiento de datos (Alta, Bajas y Modificaciones) también es parte de las tareas de los DATASETS y podemos aprovechar las propiedades del DATASET para realizar estas:

Supongamos que queremos modificar los campos del DATASET del registro en el cual estamos posicionados actualmente, haríamos algo como esto:

WITH OBJECT ::oDataSet
:NomEmp := "Juan Perez"
:Dir := "Su Calle No. X"
:Tel := "55 5553 4544"
:Edad := 25
:UpDate()
END

Basta con asignar los nuevos valores a las propiedades con el nombre de los campos y al final utilizar el metodo UPDATE(), el cual guardará los cambios en el archivo, ya sea DBF o Tabla SQL.

WITH OBJECT ::oDataSet
:AddNew()
:NomEmp := "Juan Perez"
:Dir := "Su Calle No. X"
:Tel := "55 5553 4544"
:Edad := 25
:UpDate()
END

Simplemente hemos agregado el método :ADDNEW() el cual indica que queremos agregar un registro nuevo, insisto, sin importar si es un DBF o el resultado de un SQL, realizamos la asignación de los campos, y llamamos al método UPDATE() para que se actualicen los datos en el archivo.

Para borrar registros, efectivamente, existe el método DELETE().

Un método muy interesante es el método CANCEL, cancela la operación de edición de datos, regresandote los valores de los campos al estado en que estaban ANTES de que asignaras los valores nuevos, este método es sumamente útil cuando estas editando en formularios directo sobre el DATASET.

Hemos dado un vistazo "por encima" al sistema de DATASETS de Xailer, en la documentación del producto encontrarás mucha mas información así como varios ejemplos de funcionamiento dentro de la carpeta \SAMPLES\DATACONTROLS.

En el próximo post veremos como aplicar el diseño visual de la mano de DATASOURCES y DATASETS, para realizar formularios para el mantenimiento de datos de una manera visual, y sin programar NI UNA LINEA DE CODIGO para las operaciones básicas, todo esto gracias a los DATACONTROLS.

No hay comentarios.: