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.

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

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.

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.

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.

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.

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.

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.

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.


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

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.

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 😉
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?
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
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.
Yo tengo una herramienta que te permite ejecutar updates hacía una base de datos dbisam si te interesa aún podríamos negociarla para pasartela
Hola Javier, estoy en búsqueda de un programador que me ayude a hacer un proceso que exporte datos de inventario de A2 a un archivo CSV, para una ecommerce en shopify. Veo que tienes el conocimiento y la experiencia, contactame si puedes prestarnos ese servicio. Saludos.
Mis disculpas, este mensaje se habia ido a SPAM. Con gusto, tengo experiencia en estas cosas. Si aún hay espacio, me vuelves a escribir. Estoy atento.