18 Apr 2016, 00:00

Mis tablas Firebird en un txt

La mayoría de mis programas almacenan sus datos en una base Firebird y si bien hasta ahora los clientes que “repetían” base de datos eran pocos (un problema derivado del desarrollo a medida), desde el año pasado empecé a trabajar seriamente en un par de productos enlatados, lo que me llevó a organizarme de otra manera tanto en la forma de entregas como en el proceso de seguimiento de errores. Derivado de esta nueva forma de trabajo, con actualizaciones frecuentes, seriadas y 100% remotas, me encontré con que más de una vez el script de actualización falló en algún punto y la instalación quedó sin crear tablas o alterar campos.

Anteriormente, una forma de solucionar esto era o pidiéndo por correo el archivo fdb (en el caso de bases pequeñas) o yendo al domicilio del cliente y revisando el script en persona (el acceso remoto también cuenta como “ir a hacerlo al domicilio” :) ). Lo cual es altamente ineficiente y poco escalable en la nueva estructura de desarrollo que estoy montando

Escribí scmFirebird como parte de una idea un poco más ambiciosa, pero como está “funcionando”, ya lo publiqué en GitHub y dejo un enlace al ejecutable. Esta es una versión muy verde (de momento levanta solamente las tablas y sus campos, la idea es que levante SP, triggers, vistas, etc), pero me sirve para empezar a probar otra parte del desarrollo que justamente trabaja con el archivo de salida generado por scmFirebird.

La forma de uso actualmente es solo via GUI (en breve sale la parte que trabaja desde línea de comandos). Para no hacer lío de librerías raras, usé Lazarus y sus componentes de conexión, y a fin de simplificar esta primera versión (no quería tener muchos archivos dando vueltas para una tarea tan simplona), todo el código está en el mismo formulario principal. El programa en si lo único que hace es ejecutar una consulta SQL que levanta la información y la parsea en un archivo txt.

El formato del archivo de salida es:

Tipo de Objeto; Nombre del Objeto; Nombre de la columna; tipo de dato; Longitud del tipo de dato; Precisión del tipo de dato

Tipo de Objeto por ahora es siempre T, de Tabla. A medida que produzca más objetos, se van a ir agregando identificadores. El nombre del objeto, al ser de tipo T, es el nombre de la tabla. El resto de los campos se explican por si solos.

La versión compilada para windows la dejo en este enlace, mientras que el código fuente está en el repositorio de GitHub.

Ideas y aportes, son siempre bienvenidos :)