Consultando Datos desde una Base de Datos DBISAM

En uno de los proyectos mas recientes, un cliente se interesó por mi solución para el cálculo de comisiones de ventas, producto que ha gustado bastante entre quiénes se lo he instalado.

Como con cualquier cliente, voy y vendo funcionalmente mi producto y realizo un diagnóstico para estimar el trabajo de integración a realizar. Por supuesto que este cliente, como los anteriores, tienen un sistema administrativo distinto por lo que no pude reutilizar integraciones anteriores.

Nosotros usamos A2, me comentan y entonces ahí sentí un pequeño balde de agua fría cayéndome, no solo porque no lo había integrado antes con A2, sino porque A2 emplea un motor de base de datos poco común como lo es DBISAM de Elevate Software.

DBISAM es un motor de base de datos bastante sencillo pero muy cerrado. Se basa en un archivo físico por tabla y para usarlo debes emplear su driver ODBC, o IDEs específicos que te permite interactuar con la base de datos como si fuese una base de datos relacional.

El Problema

Acá entre amigos, mi solución, basada en Java, no va a funcionar porque a partir de Java 8 el soporte ODBC fue descontinuado…. Ok, bajo a Java 7, pero el driver ODBC es 32 bits y no hay versión de 64 bits… Y además, Java no garantiza que su driver ODBC funcione bien con la mayoría de los DBMSs…. Y no es que uno diga DBISAM y ya uno sepa quién és… Seguro tendría problemas luego… Si tan solo la base de datos fuese MySQL, SQL Server, o cualquier DBMS «serio»…

La Solución

Si tan solo pudiese migrar la base de datos al menos a SQL Server… Y lo es, super fácil!

Paso 1: Instalar y Configurar Drivers

El driver odbc viene con la licencia que adquieres para usar DBISAM por lo que no puedo compartirlo por acá.

Luego de instalarlo, para configurar la conexión ODBC debes abrir el manejador de orígenes de datos de 32 bits, recuerda que el driver al no tener una versión 64 bits, si abres el manejador estándar de 64 bits, no lo verás disponible.

En la pestaña «DSN de Sistema» seleccionas añadir nuevo y podrás ver en la lista el driver ODBC que necesitamos.

Administrador de origen de datos ODBC mostrando DBISAM

Luego, añade un nombre al origen ODBC con el cual identificarás la conexión a la base de datos.

Colocar nombre a origen de datos DBISAM

Los siguientes pasos dependen desde donde estés realizando la configuración. Yo trabajé con un entorno local (menos dolores de cabeza), y es lo que recomiendo.

Configurar conexión local con DBISAM

El paso siguiente de pide indicar donde se encuentra el sistema de archivos de la base de datos de DBISAM, esto lo conoces tú, normalmente será una carpeta llamada «data» en el directorio de la aplicación con quien vino DBISAM embedido. Yo por seguridad, coloqué que solo quiero leer información.

Configurar ruta de acceso a los ficheros de la base de datos de DBISAM

Los pasos siguientes son «Next» tras «Next» hasta finalizar. Y con esto, ya puedes leer datos desde la BD mediante conexiones ODBC (Excel, .net, entre otros)… Menos Java 8 o cualquier versión anterior de 64 bits!

Paso 2: Puentear la Base de Datos de DBISAM con SQL Server

Lo que estoy por explicarles, mas que una solución en línea, es un workaround que me ingenié pues para mis necesidades, no requiero la información en SQLServer en tiempo real y la receta es.

Ingredientes:

  • Driver ODBC de DBISAM (Ya instalado y configurado)
  • SQL Server 2008 o superior

Preparación:

SQL Server 2008 en adelante viene con una poderosa herramienta que permite realizar procesos ETLs sencillos y es el «Asistente para importación y exportación de SQL Server». Este también viene en versión 32 bits y 64 bits. Debemos usar el de 32 bits…

La solución que voy a proponer es emplear este asistente para generar un script que será ejecutado por algún programador de tareas para copiar las tablas que me interesan de la base de datos en DBISAM en SQL Server.

Para esto, configuramos promero el origen de datos seleccionando «.Net Framework Data Provider for ODBC». El nombre de nuestro origen de datos es el mismo que configuramos anteriormente.

Seleccionar proveedor ODBC de DBISAM para leer los datos

Si colocamos el nombre del origen de datos correctamente, al presionar el botón «Siguiente» nos permitirá seleccionar el destino.

En nuestro caso, el destino es nuestro SQL Server.

Seleccionar destino SQLServer para escribir información leida en DBISAM

Luego, nos vamos con la opción de copiar datos de una tabla a otra, no queremos nada pretencioso, solo tener una copia de DBISAM en SQL Server.

Seleccionar copiar datos de una tabla para tener copias exactas desde DBISAM en SQL Server

Seleccionamos las tablas que nos interesa copiar y si requerimos editar alguna, por ejemplo, para omitir columnas o cambiar tipos de datos, presionamos «Editar asignaciones». Una opción que siempre habilito es la de eliminar y crear de nuevo la tabla en el destino, en caso de que no sea tan grande.

Editor de tablas y columnas a transferir desde DBISAM a SQL Server

Una vez realizada la configuración de tablas y columnas, se puede exportar la configuración en un archivo .dtsx para ejecutarlo tantas veces se requiera posteriormente.

Indicar generar archivo .dtsx para ejecutar posteriormente el script de migración desde DBISAM a SQL Server
Indicar dirección donde almacenar el fichero .dtsx que permitirá exportar los datos desde DBISAM a SQL Server cada vez que sea ejecutado

Tras finalizar el asistente, se realizará una primera ejecución del script.

Resultado de importación inicial desde DBISAM hacia SQL Server

SQL Server viene con una herramienta que permite ejecutar a través de la línea de comandos scripts .dtsx. Esta se llama DTEXEC y puede ser invocada desde cualquier ruta. La imágen siguiente muestra cómo invocar un archivo .dtsx.

Ejecutar fichero .dtsx mediante consola con DTEXEC

De acá en adelante, puedes automatizar la ejecución mediante el programador de tareas de Windows o algún otro como Jenkins. Y los datos, buenos, estarán en SQL Server para tu provecho!

Espero las ideas y explicaciones de este post de hayan ayudado! Si es así, deja un comentario para saberlo 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *