DBISAM. Leer desde una Base de Datos mediante ODBC

DBISAM no es una base de datos común pero algunos buenos servicios se apoyan de ella.

En uno de los proyectos más 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 Driver ODBC de DBISAM

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.

dbisam odbc
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.

dbisam odbc
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.

dbisam odbc
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.

dbisam odbc
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.

dbisam sql server
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.

dbisam 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.

dbisam 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.

dbisam sql server
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.

dbisam sql server
Indicar generar archivo .dtsx para ejecutar posteriormente el script de migración desde DBISAM a SQL Server
dbisam 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.

dbisam sql server
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.

comando dtexec
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 😉

3 respuestas a «DBISAM. Leer desde una Base de Datos mediante ODBC»

  1. Hola, me parecio buena tu referencia, casualidad tengo problemas para concectarme con la base de datos de a2, tengo el odbc y solo necesito correr un update en una de las tablas, el programa es bastante sencillo solo editar los valores de una tabla pero necesito hacerlo siempre, pro eso recurri a realizar un programa que el cliente con solo presionar el boton se ejecute, mi pregunta es como haces para que se conecte y me haga caso a la sentencia?

    1. Hola Ysabel,

      ¿Pero pudiste configurar el ODBC y al menos probar leer datos? Mi recomendación es que lo hagas empleando alguna tecnología .NET para facilitar la lectura o escritura en la BD. Cuando configuras el driver ODBC hay un paso en el que indicas si es solo lectura, ese campo tendrías que haberlo dejado desactivado. En este instante no tengo un post a la mano sobre como usar ODBC en .NET, o Java por ejemplo. Pero no debería ser muy complejo si tomas en cuenta lo recién indicado.

      Saludos

      1. no lo pude hacer ese es el problema, el update obvio lo se hacer, pero siempre use base de datos sql server lo que lo facilita, pero con dbisam no he podido.

Deja un comentario

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