Ver Mensaje Individual
  #7  
Antiguo 17-05-2016
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
No veo problema.

Para actualizar los registros:
El catálogo principal (el maestro), usas un "Extract data" (desde IbExpert es así, desde delphi depende de los componentes IBX, Zeos o el que uses). Casi todos tienen un método que extrae los datos como "insert", "insert or update", o "Merge" (suele llamarse proceso por lote "Batch"), así que extraes todo el contenido de una tabla y lo guardas en un archivo con extensión .SQL, separadas por punto y coma cada instrucción sql. Si quieres borrar siempre el catálogo que tenga el cliente, pues más simple, la primera línea del script sería "delete from catalogo;" y el resto de líneas solo hace inserts.

Si haces uso de imágenes y campos blob, quizás necesites hacer una exportación en formato binario (RAW), o usar tablas externas (ficheros binarios usados para exportar una tabla a disco y después importar)

Para actualizar la definición de la tablas:
Lo mismo, otro archivo .sql pero esta vez las instrucciones son "alter table clientes add certificado_digital varchar(100); " instrucción para añadir un nuevo campo a la tabla clientes.

Actualizador en el cliente:
1º- se baja la definición de las tablas y lo ejecuta con un script:
- IBScript.Script.LoadFromfile(...);
- IbScript.Script.Exectue; esto modifica la estructura de todas las tablas de tu base de datos Firebird, o de las que necesitas.
2º- descarga el fichero de registros. Se hace justo igual que antes, cargando en un Script y ejecutando.

Por supuesto el IBScript tiene eventos que te dice si algo falla, qué instrucción sql falló y si continuar o abortar el proceso de ejecución.

Si quieres guardar un "control de versiones", hay muchas formas, una es guardar cada grupo de actualizaciones en archivos llamados 001.sql, 002.sql y si el cliente tiene la versión 023.sql, solo descarga y ejecuta los scripts del 024.sql hasta el último que encuentre en la carpeta del FTP.

Con todo esto puedes crear procedimientos almacenados, vistas, triggers en la base de dato del cliente. Puedes borrar campos de las tablas y modificar los registros.

NO te aconsejo usar integridad referencial... es un mal consejo desde el punto de vista de diseño de bases de datos, pero ganarás en libertad para modificar la estructura de la base de datos... Imagina este escenario: Tienes varias tablas relacionadas por claves ajenas, (campos foráneos), si borras un registro y se produce un borrado en cascada, actualización y demás, el dolor de cabeza para dejarlo todo cuadrado es demasiado. Créeme, llegará el momento que quieras modificar los datos de una tabla maestra, sin modificar los detalles (típico caso de mover 100 lineas de una factura a otra porque el usuario se equivocó de cliente)

Aconsejo normalizar las tablas, crear el mismo campo en dos tablas que se relacionen, pero no uses el "foreign key" al definir las tablas. Te obliga a escribir 2 sqls al actualizar, borrar una tabla detalle y después la maestra, pero no es nada con el lío de "foreigns keys", te lo garantizo.

Saludos!
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita