jueves, julio 24, 2008

Acceso a Datos con Xailer Parte I, Los DataSources

En esta serie de artículos, divididos en 3 partes, trataré de arrojar un poco de luz sobre las poderosas herramientas que tiene Xailer para el manejo de distintos formatos de almacenamiento de datos.

Si bien es perfectamente posible acceder a distintos formatos de datos con la versión Personal de Xailer, de la manera tradicional para archivos DBF, es decir mediante el uso de instrucciones XBase, o bien mediante el uso de ADO a travéz de OLE para acceder a tablas SQL, en las versiones Profesional y Enterprise, el trabajo de accesar a distintos formatos de almacenamiento de datos queda enormemente simplificado por medio de las herramientas que para ello posee Xailer.

Antes de entrar en materia debo advertir que no soy un experto en el manejo de todas las características de estas herramientas, así que cualquier comentario para ampliar los conocimientos sobre ellos es bien recibido.

Comencemos pues analizando los componentes que tiene Xailer para manejar el acceso a datos, son 3 y son:

  • DataSources
  • DataSets
  • DataControls
Por medio de estos 3 componentes es sumamente simple "conectarte" con CUALQUIER FORMATO DE BASE DATOS, llámese DBF o SQL, pudiendo incluso cambiar de formato de archivo con unos cuantos clicks del mouse, o bien trabajar simultáneamente con mas de un tipo de archivos de datos, de tal forma que es posible cambiar de usar DBFs a usar MySQL, o de un SQL Server a un ADS, o bien trabajar al mismo tiempo tablas DBF con tablas SQL con el mismo EXE. El cambio entre los distintos formatos de dato se hace simplemente con clicks del mouse, tocando mínimamente el código fuente,esto desde luego no es algo mágico y está sujeto a algunas restricciones que veremos durante esta serie de artículos.

Los componentes de acceso a datos de Xailer facilitan enormemente la forma en que accedes a los datos, olvídate de lidiar con cadenas de conexión para ADO, o de manejar cursores ODBC, o de programar los bloqueos cuando trabajas en red con tablas DBF, los componentes de manejo de datos de Xailer hacen todo el trabajo por tí dejandote tiempo para hacer el trabajo de programación mas pesado sin tener que preocuparte por el tema del mantenimiento de los datos, que dicho sea de paso y solo por adelantar un poco, un ABM (Altas, Bajas, Modificaciones) se puede hacer solo con clicks del mouse, sin necesidad de programar nada, pero no adelantemos vísperas, eso lo veremos en el último capítulo de la serie.

Como expliqué anteriormente Xailer divide en 3 partes el acceso a datos:

1.- Ubicación de los datos, es decir, la localización de la información, ya sea dentro de nuestro disco duro local, en un servidor de red, o en el caso de los SQL o ADS en un servidor montado sobre internet o en una WAN, el componente que se encarga de hacer esta labor es el DATASOURCE.

2.- Obtención de lo datos a manipular, es decir, definir que datos y de que tablas se obtienen, si es un DBF, una tabla completa SQL o bien el resultado de ejecutar un Query sobre una o varias tablas almacenadas en una base de datos SQL, de este trabajo se encarga el DATASET, obviamente para poder obtener los datos, debemos previamente tener creado un DATASOURCE.

3.- Finalmente el último componente que usa Xailer para el acceso a datos es el DATACONTROL, se trata de controles visuales, tales como Edits, (Gets), Labels (Says), Combos, Radios, Browses, ListBoxes etc, que están directamente relacionados con uno o varios campo del DATASET, de esta manera, al relacionar un control de captura o edición directamente con un campo del DATASET, estamos reduciendo enormemente el tiempo de desarrollo, ya que los DATACONTROLS saben perfectamente como manejar los datos con los cuales están relacionados.

Comencemos pues hablando del primer componente de acceso a datos los DATASOURCES.

Como expliqué anteriormente, un DATASOURCE nos sirve para indicar donde están los datos a los cuales queremos acceder. Dependiendo de la ubicación, o del tipo de datos que queramos manipular, nuestro programa puede tener uno o mas DATASOURCEs

Los DATASOURCES son controles de Xailer que se encuentran en la pestaña DATASETS de la barra de controles y dependiendo de tu versión de Xailer, puedes tener mas o menos DATASOURCES, si en tu barra de controles de Xailer no aparecen ni la pestaña DataSets, ni la pestaña Data Controls, entonces estás usando la versión Personal, y esta no tiene soporte a los componentes de acceso a datos Xailer, sugerencia: Actualiza tu versión a PRO o a Enterpise.



Si tu versión de Xailer es PROFESIONAL entonces tienes 5 DATASOURCES:

  • ADS, para archivos de Advantage Database Server
  • CDX y NTX para archivos DBF con este tipo de índices
  • ADO para acceder a tablas SQL mediante OLEDB, este componente es muy interesante, porque te oculta todo el proceso de conexión con las tablas, simplificándote enormemente el trabajo, como veremos mas adelante.
  • ODBC Dado que la tecnología ODBC es obsoleta ya, es poco recomendable utilizar este DATASOURCE sin embargo es buena idea tenerlo a mano cuando no se pueden realizar las conexiones con bases de datos SQL mediante ADO
Si tu versión de Xailer es ENTERPRISE entonces tienes 2 DATASOURCES adicionales:

  • MySQL: Xailer incluye una librería y una DLL nativas que te permiten acceder directamente a servidores MySQL sin necesidad de ADO ni de ODBC, este componente es extraordinariamente rápido, mucho mas rápido que cualquier otro tipo de acceso ya que no tiene que pasar por las capas de comunicaciones de Windows, funciona conectando tu programa Xailer directamente con MySQL usando los puertos TCP/IP y funciona muy bien y rápido aún en conexiones remotas.
  • SQLite, Adicionalmente, Xailer incluye soporte a SQLite, que es una pequeña pero poderosa base de datos SQL freeware, que está autocontenida completa dentro de un archivo .LIB, lo interesante de este producto es que en un solo LIB incluye el servidor de la base de datos, es un servidor transaccional, se puede utilizar en entornos de red, es extremadamente rápido, aunque presenta la desventaja de no ser cliente servidor, pero de todas formas es un estupendo sustituyo para los DBFs, ya que no tienes que distribuir nada ni instalar nada para hacerlo funcionar con el usuario final.
Usando los DATASOURCES.

Como un DATASOURCE es un control de Xailer, para usarlo en nuestro proyecto, basta con que hagamos click sobre el tipo de dato al cual queremos acceder y dejemos caer el control dentro de nuestro formulario, a diferencia de Delphi o Visual Basic, donde visualmente se ve dentro del formulario un icono que representa al DATASOURCE, en el caso de Xailer no es visible dentro del diseño del formulario, sin embargo en el inspector de objetos aparece claramente indicado, vamos a suponer por ejemplo que queremos trabajar con un archivo DBF con índices CDX:



En este caso en específico la ubicación de los archivos DBF, con índices CDX se establece en la propiedad cConnect, que por default apunta a "." es decir, la directorio actual, lo que quiere decir que por default se buscarán todas las tablas DBF en la carpeta donde se encuentre el archivo .EXE, esto puede ser variable, tu puedes indicar la ruta donde estarán tus archivos, ya sea en tiempo de diseño como en este caso, simplemente tecleando en la propiedad la nueva ruta.

La ruta también se puede asignar por programación, desde el evento OnInitialize del formulario, tu puedes escribir la ruta donde se encuentran tu tablas DBF, sería algo como esto:

::oCdxDataSource1:cConnect := "C:\miprograma\carpetadedatos"

Como se dijo antes, el DATASOURCE establece DONDE están los datos, luego entonces, las propiedades de los DATASOURCEs son distintas dependiendo del tipo de dato al cual nos queramos conectar, veamos estos 3 ejemplos que serían para conectarnos con "tablas libres":



Analicemos las principales características de cada DATASOURCE, no voy a tocar todas las propiedades porque entonces tendría que escribir un libro completo sobre DATASOURCE, pero, en la documentación de Xailer vienen documentadas todas las propiedades, métodos y eventos cada uno de estos componentes, puedes consultar allí si necesitas mas información.

Veamos primero el DATASOURCE para Advantage Database Server (ADS), como verás, este DATASOURCE nos permite conectarnos ya sea a una carpeta donde hay archivos DBFCDX, DBFNTX o ADTADI (propiedad nFileType) como tablas libres, o bien a un "diccionario de datos" (propiedades cConnect y lUseDictionary), si nos vamos a conectar a un diccionario, podemos establecer usuario y password para ese diccionario (propiedades cUser y cPassword), si deseamos definir el tipo de servidor al cual nos vamos a conectar: Local, Remoto o Internet o bien a una combinación de servidores (propiedad nServerType), si deseamos utilizar el bloqueo propietario de ADS (propiedad lAdsLocking) o bien si queremos activar el mecanismo de protección de datos por medio de ocultamiento en el servidor de las carpetas de datos (lRightsCheck), todo esto se hace con clicks del mouse y Xailer va generando el código correspondiente y lo va guardando en el archivo .XFM, esto es igual para todos los controles de Xailer, todos generan código fuente y todo queda almacenado en el .XFM, recuerda que un archivo .XFM es un archivo .PRG común y corriente, pero que es escrito por el diseñador de formularios de Xailer, de tal modo que siempre tienes acceso a ver lo que Xailer a escrito, simplemente editando el archivo .XFM. También es importante recordar, que todas las propiedades de los DATASOURCES pueden ser cambiadas desde código fuente utilizando los eventos OnInitialize de cada formulario.

Si estuviera utilizando la versión Personal de Xailer, y no tuviera componentes DATASOURCE, entonces tendría que haber escrito todo el código de acceso al servidor ADS, algo como esto:

REQUEST ADS
RDDSETDEFAULT("ADS")
AdsSetServerType ()
AdsSetFileType()
AdsRightsCheck(.F.)
AdsLocking(.T.)
AdsConnect60("\\la ruta\ y\el archivo\diccionariodedatos.add",,,)


Con Xailer, simplemente con clicks del mouse me ahorro tener que escribir lo anterior. Dejad a Xailer que trabaje por tí, porque tu tienes que enfocarte en el otras cosas mas importantes del desarrollo del sistema.

Otra propiedad muy interesante y sumamente útil en tiempo de desarrollo y diseño, es la propiedad lConnected, que usaremos ampliamente con los DATASOURCEs para SQL y con los otros componentes de acceso a datos, principalmente con los DATASETs, esta propiedad nos permite "conectarnos" en tiempo de diseño al servidor de la base de datos, lo cual nos va a permitir traer datos al IDE de Xailer durante la etapa de diseño de formularios, esto nos ayudará enormemente, porque podremos ver "en vivo" los datos sobre los cuales estamos trabajando, de tal manera que podremos diseñar un Browse visualmente, estableciendo que columnas que queremos que sean visibles, de que color queremos pintar el browse, establecer anchos de columna para visualizar los datos, en fín, una ENORME cantidad de posibilidades en cuanto a diseño, pero como dije antes, no nos adelantemos, caminemos y después corramos.

Veamos ahora los DATASOURCES para archivos DBFCDX y DBFNTX, como podrás apreciar tienen solo las propiedades básicas, como tipo de bloqueo (nLockScheme), tipo de campo memo (nMemoType), tamaño del bloque del campo memo (nMemoSize), el tiempo que debe esperar antes de marcar un error cuando ocurre una falla abriendo archivos compartidos en entornos de red (nTimeOut) y en el caso del DATASOURCE DBFCDX, el tipo de archivo a usar (nTableType), recuerda que Clipper 5.3 emplea su propio formato de archivos DBFCDX, mientras que el formato real original de FoxPro utiliza un formato DBF distinto al utilizado por Clipper, Clipper puede leer tablas de FoxPro sin ningún problema, pero FoxPro a veces tiene problemas para leer tablas DBF generadas con Clipper.

Veamos ahora los DATASOURCES especializados en acceso a Datos SQL, que puede ser por medio de ADO o bien de ODBC:



Al igual que los DATASOURCEs anteriores, estos presentan distintas propiedades, hablemos primero del mas usado hoy en día por todos los programadores de xHarbour que ya estamos accediendo a tablas SQL por medio de ADO, el ADO DATASOURCE.

El uso de este DATASOURCE te evita tener que crear manualmente el objeto Connection, necesario dentro de la arquitectura ADO para realizar la conexión con un servidor de base de datos basado en SQL, en realidad este DATASOURCE es una "caja negra" que se encargará de realizar la conexión con el servidor de base de datos, y cuenta para ello con la propiedad cConnect, que donde deberás indicar el "connection string" necesario para todas las conexiones via ADO, lo interesante de esta propiedad, es que no necesitas conocer la cadena de conexión, Xailer la arma por tí.

Supongamos que queremos conectarnos a una base de datos ACCESS y que no conocemos la cadena de conexión o string connection que se necesita para conectarnos con ella, bien, presionando el botón que tiene las elipsis (...) junto a la propiedad cConnect, y aparece un diálogo como este mostrándonos TODOS los proveedores ADO instalados en nuestro equipo, seleccionemos el de ACCESS que es el Microsoft Jet:




Como verás en la lista aparece también el proveedor ADO de ADS, y un poco mas abajo, 2 lugares antes del último, el proveedor ADO de SQL Server, seleccionemos pues el de ACCESS y pasemos a la pestaña SIGUIENTE>>:





En esta pestaña estableceremos la ubicación de la base de datos de ACCESS y podemos probar que la conexión sea exitosa, cabe mencionar de paso, que el contenido de esta pestaña cambia dependiendo del proveedor ADO que hayamos seleccionado en el paso anterior. Básicamente es todo lo que necesitamos hacer, ahora simplemente le damos al botón ACEPTAR y ¡ magia !, Xailer ha creado la cadena de conexión con el proveedor ADO correspondiente.

Para visualizar la cadena, pincha el pequeño triángulo anaranjado que está junto al botón que tiene las elipsis (...) y aparece un formulario con la cadena de conexión correcta:





Y listo, Xailer ha creado una cadena de conexión que ha sido previamente probada que funciona, esto te ahorra estar haciendo experimentos obteniendo cadenas de conexión de www.connectionstrings.com a ver cual es la correcta. Dejad que Xailer trabaje por ti .......

El resto de las propiedades son similares a las del objeto Connection de ADO, te recomiendo una lectura al manual de ADO o bien al archivo de ayuda de Xailer que contiene todas las propiedades de este DATASOURCE.

Hablemos ahora del DATASOURCE ODBC, que como mencioné anteriormente está obsoleto, porque ODBC de por sí ya es una tecnología obsoleta, lo de hoy es ADO. Pues bien, para conectarte con una base de datos usando ODBC es necesario crear previante un "DSN" o Data Source Name ó en Español Nombre de Origen de Datos, estos DSNs se crean desde el panel de control / Herramientas Administrativas / Origenes de Datos ODBC.

Para nuestro ejemplo supongamos que no tienes la versión Enterprise de Xailer y quieres conectarte con MySQL.

MySQL no tiene un proveedor ADO mas que para .NET, las conexiones luego entonces se tienen que realizar via ODBC a través del driver MyODBC que puedes descargar desde la página de MySQL (para este ejemplo usaremos ODBC, pero también es posible usar ADO a través de una capa ODBC y esta es la mejor manera de conectarte a MySQL desde la versión Profesional de Xailer. En lo posible procura evitar el uso de ODBC, busca primero un proveedor ADO).

Voy a obviar los pasos para crea un DSN, y me voy a ir directamente al administrador de DSNs de sistema dentro de Orígenes de Datos ODBC, donde ya tengo creado un DSN llamado "PRUEBA" que me conecta con MySQL, a través del controlador MySQL ODBC 3.51:




Para usar este DSN dentro del DATASOURCE ODBC de Xailer, lo único que tengo que hacer, es simple y sencillamente, poner el nombre dentro de la propiedad cDNS, poner la propiedad de lConnect en verdadero (.T.) y ¡ listo !, estoy conectado via ODBC a MySQL. Nota que además se creado una "cadena" de conexión en la propiedad cConnect del DATASOURCE ODBC que muestra algo como esto:




Así de simple es conectarte con cualquier servidor de datos SQL, sin muchas complicaciones mediante DATASOURCEs de Xailer.

Por último para finalizar el comentario de esta semana, veamos los 2 DATASOURCEs incluidos en la versión Enterprise de Xailer, el nativo para MySQL y el de SQLite, que presentan las siguientes propiedades:




Los 2 DATASOURCEs que incluye la versión Enterprise no requieren de ningun método de acceso a datos provisto por Windows, ya que en ambos casos, el acceso a estos servidores de datos está dado por archivos .LIB que deben de ir enlazados a tu programa Xailer, y en el caso de MySQL deberás incluir adicionalmente una DLL que maneja las comunicaciones, pero esto compensa muchísimo porque a diferencia de los modelos ADO y ODBC, no necesitas conseguir ningún proveedor o controlador, instalarlo en el cliente, configurarlo, crear DSNs en cada cliente, etc. tu programa Xailer es mas que suficiente, y en todo caso la DLL de acceso a MySQL.

Veamos primero el DATASOURCE MySQL, que es idiotamente simple de configurar, simplemente pon en las propiedades los datos solicitados, aunque el inspector de objetos de Xailer te presenta las propiedades en orden alfabético, estas deben de ser asignadas siguiendo el siguiente orden (sugerido):

1. La ubicación del servidor MySQL (cHost) puede ser una IP pública o bien una dentro de la red local, también un nombre de servidor con o sin dominio (dominio.algo), esto es ideal si tu proveedor de hosting te ofrece base de datos MySQL en tu paquete, puedes poner una base de datos en Internet y accesar a ella desde distintos lugares con tu programa Xailer.

2 Usuario y password para poderte conectar con el servidor MySQL. En este punto puedes poner la propiedad lConnect en verdadero, y verás que de manera automática en la propiedad cDataBase, se rellena un combo con los nombres de todas la bases de datos que tiene el servidor MySQL al cual te estas conectando.

3. Selecciona el nombre de la base de datos a la cual quieras conectarte, puedes escribirlo o bien seleccionarlo de un combo si previamente has puesto la propiedad lConnect en verdadero (¿ ves ahora la utilidad de esta propiedad ?, pues bueno, espera a la próxima entrega.... vas a alucinar en colores).

Y listo, estás conectado con MySQL, mas sencillo imposible.... Dejad que Xailer .......

Todavía mas simple y sencillo aún es conectarte con SQLite, ya que la propiedad cConnect, solo necesita el nombre del archivo que contiene la base de datos (.DB) y listo, estás conectado.... ¿ que como creas, editas y das mantenimiento a las tablas dentro de una base de datos en SQLite ?.... muy fácil, Xailer provee un editor de base de datos SQLite, lo encuentras en la opción del Menú Principal / Base de Datos / Explorar SQLite en la versión Enterprise, este es el editor de bases de datos SQLite de Xailer:




En este artículo hemos analizado primero como conectarnos a distintos formatos de bases de datos desde Xailer usando DATASOURCES, pero esto es solo el principio, hay por delante 2 entregas mas de esta saga.

El próximo artículo será mas interesante ya que estudiaremos como obtener los datos y manipularlos usando los potentísimos DATASETS de Xailer, se te va a caer la mandíbula al suelo cuando veas con que facilidad puedes hacer un Altas - Bajas - Modificaciones a cualquier base de datos, usando unos cuantos métodos y los DATASETs.

La proxima semana tendremos proyectos de ejemplo y podrás probar algunos ejemplos, así que si no tienes Xailer.... ¿ Que esperas para descargar la versión de evaluación ?, todo lo que comentemos aquí esta disponible en el demo, el cual es totalmente funcional... visita www.Xailer.com

6 comentarios:

Adolfo Lagos dijo...

Rene.

Gracias por tu tiempo, ya he logrado hacer varias cosas con XAILER, y de verdad, una vez que le tomas el paso, es facilisimo, aunque el hecho de no poder "controlar" todo como se hace en la competencia, y que el ide te AYUDE TANTO, me asusta un poco.... eso de ser programador de la vieja escuela y hacer todo a tecla es una costumbre dificil de sacar.
Esperare tu nueva documentacion para seguir la migracion.

Desde Chile, un abrazo.
Adolfo

Rene Flores dijo...

Adolfo:

Tu tranquilo, en todo momento tienes el control de todo, igual o mejor que en FiveWin.

Xailer escribe código fuente, si tu quieres ver todo lo Xailer ha escrito por tí simplmente abre el archivo .XFM que Xailer genera cuando trabajas con el IDE, verás que es un PRG común y corriente.

Por otro lado todos los comportamientos que diseñes con el IDE son facilmente modificables desde el evento OnInitialize de cada formulario, sigues teniendo el control de todo, pero ahora de una manera distinta.

Esteban dijo...

Hola René.

Estoy queriendo iniciar a explorar xAiler, instale el demo y me registré, inicié revisando los ejemplos pero al compilar cualquiera de ellos me manda los 2 siguientes mensajes de error,
ya busque algo en los foros de xAiler pero no encontré nada.
agradezco de antemano la ayuda.

Unresolved external '_HB_FUN___CLSISACTIVE' referenced from c:\xailer\lib\xailer.lib | TApplication

lo mismo para la funcion ...__CLSACTIVE

Rene Flores dijo...

Esteban:

Xailer utiliza su propia version de xHarbour que tienes que descargar desde la misma página de descargas de Xailer.

El xHarbour para Xailer se instalara en la carpeta \Xailer\xHarbour, por lo que tendrás que modificar desde:

Menu principal / herramientas / opciones generales

Seleccion xHarbour del arbol de directorios y modifica las rutas para que apunten a las carpetas donde esta instalado el xHB

Con eso debe funcionar perfectametne Xailer y los ejemplos.

Fer dijo...

Bajè el xailer , lo instalè en
mi pc , me registrè , ahora
quiero ver los ejemplos , cargo
uno de ellos y me dice q no consigue la ruta ...

SAludos

Rene Flores dijo...

Fer:

tienes que descagar tambien el xHarobur para Xailer, instalarlo en la capreta c:\xailer\xharbour.

Tienes que configurar el entorno de programación para que busque el xHarbour en la carpeta donde lo instalaste y lisot