FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Chequear y hacer Cambios en Base de Datos Firedac + Firebird 3
Que tal Colegas.
Estoy tratando de hacer mejor un sistema automatico que chequee la estructura de mi base de datos. Tengo una aplicacion VCL, de la cual subo actualizaciones del EXE a mi servidor y se actualizan los clientes al ejecutar. Al conectar el EXE a la Base Firebird con Firedac, lo primero que leo es un INTEGER de un campo VERSION. Luego en el EXE antes de seguir cargando el sistema tengo numeros de Version donde hubo cambios en la estructura de la BD
Y asi cada vez que hago cambios en la estructura de Firebird, agrego varias lineas en el EXE, para que si el exe fue encuentra una version desactualizada de la Base de datos la pueda actualizar, pero se me torna incomodo. ¿existe alguna forma de hacerlo todo en SQL, y dejar solo un Query que se ejecute al iniciar y el mismo query compare la version actual de la Base de datos con las diferentes versiones de cambios posteriores y vaya aplicando los cambios necesarios? Espero que se entienda la idea de lo que quiero lograr? . Muchas gracias |
#2
|
||||
|
||||
Si no he entendido mal, tienes muchas opciones. Por ejemplo, tienes todas los cambios en la BD en una tabla específica, algo así como:
Cita:
Y en tu BD del programa puedes tener un campo que sea algo así como: Cita:
Finalmente cambias ultimasentenciaejecutada por 5, en este caso.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
Cita:
Y yo guardaba en la BD en un integer de formato 2208181840 (que significa año mes dia y hora del cambio de la BD). Y lo que me esta pasando es que tengo como 30 procedimientos (uno por cada día que hice cambios en la BD) Y buscaba una idea de como organizar mejor todos los procedimientos dentro del código fuente. Pensaba en un futuro ir eliminando los procedimientos primeros para limpiar código que ya será inservible. |
#4
|
|||
|
|||
se me ocurre almacenar en un clientdataset todos los numeros de version de la BD, y en un campo blob el string de sql a ejecutar para actualizar a dichos cambios
|
#5
|
||||
|
||||
Clientdataset no es algo que esté grabado sino algo que lees a memoria, se pierde al cerrar.
Te aconsejo algo como he indicado.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
|||
|
|||
Tenes razon, en el entusiasmo se me pasó ese detalle.
Y grabarlo a disco no me sirve porque entraría en la misma cuestión que quiero controlar. Serviria alguna forma de tabla en memoria que la pueda editar en tiempo de diseño y se grabe en el exe. |
#7
|
||||
|
||||
¿Pero tú quieres que se actualicen los programas de los usuarios o sus bases de datos?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#8
|
||||
|
||||
Yo uso un sistema muy simple.
Incrusto como una constante el archivo con las migraciones dentro del .exe, en este formato:
Eso lo comparo contra la version de la BD y simplemente es partir el archivo, chequear la version y recorrerlo.
__________________
El malabarista. |
#9
|
|||
|
|||
Cita:
Lo que busco es optimizar el actualizador de base de datos, que de momento lo tengo en un procedimiento en el exe y le voy agregando comprobaciones de versión para que actualice la BD segun corresponda para quedar siempre al dia. (misma version de requisitos del exe con la version de la BD). |
#10
|
|||
|
|||
Cita:
Yo al principio en el form principal, tenia un procedimiento que chequeaba la version de la BD y luego ejecutaba las correcciones necesarias. Luego como el procedure iba creciendo lo saqué a una unit individual para no verlo y que no moleste. Y estaba buscando ideas para optimizarlo. |
#11
|
|||
|
|||
Cita:
En cuanto a la logica para el chequeo, se me ocurre en el source, del form principal, luego de crear los datos y conexion a bd.
Mi procedure Actualiza lo vengo haciendo asi pero es un lio
Cada procedure carga en un TFDQuery las sentencia SQL necesarias para actualizar a la version en cuestión. Funciona, pero me parece que no es prolijo. |
#12
|
||||
|
||||
Cita:
Cita:
De hecho, yo lo pongo como una función de la BD:
Para la logica, lo que hago es que hago in split del SQL en cada "GO"
Y parser el segmento de "version". Esto es rust pero la lógica creo se entiende: Código PHP:
__________________
El malabarista. |
#13
|
|||
|
|||
Que tal colegas, finalmente le he dado un giro a todo este tema y lo he resuelto de la siguiente manera, que me resulta transparente para chequear y agregar cambios y practico.
A todo lo planteado anteriormente lo reoslvi, creando una tabla SQLITE con un campo ID (UNTEGER) y STRING (BLOB). En el ID voy agregando el Nº de version de la base de datos, y en el campo STRING, agrego el string SQL necesario para pasar de la version anterior. Suponiendo que la version inicial es 1 en la tabla tengo
A la tabla Sqlite le iré agregando todos los cambios siguientes Luego en delphi, DESCARGO A ARCHIVO EL SQLITE.DB
luego de crear el programa, cargo a un query el archivo sqlite Hago una consulta para obtener el Nº de version actual y lo guardo en la variable DBVer y luego ejecuto una funcion que hace todo el chequeo y luego continua la carga del sistema
De esa forma he resuelto sin tener que parsear textos ni recorrer archivos manualmente Cada vez que agrego un cambio debo agregar a los recursos del ejecutable la nueva tabla SQLITE con los cambios Espero sirva de ayuda Gracias a todos por sus aportes |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
[FireDAC] Desconexión a la Base de Datos | MAXIUM | Conexión con bases de datos | 4 | 14-06-2021 21:12:59 |
Filtrar Base de Datos FireDac | pokexperto1 | Conexión con bases de datos | 6 | 03-10-2015 01:26:07 |
Controlar Cambios en la Base de Datos | afunez2007 | MS SQL Server | 5 | 12-07-2013 19:04:12 |
Chequear integridad base de datos | Toni | Firebird e Interbase | 4 | 09-01-2013 21:02:34 |
Como hacer conexión de una base de datos en firebird. | Niiña | Conexión con bases de datos | 5 | 28-11-2011 23:43:04 |
|