Como se pueden actualizar la estructura de la base de datos de mariaDB?

392 views
Skip to first unread message

alvarocastellar

unread,
Oct 13, 2017, 10:12:42 AM10/13/17
to Comunidad de Visual Foxpro en Español
Amigos buenos dias, ya finalizando mi proyecto de cambiar mi base de datos nativa de vfp a mariabDB usando foxyDB (un poco de publicidad al amigo antonio meza que me ha ahorrado un mundo de trabajo).
Tengo el siguiente impase: Como sabemos constantemente por actualizaciones, modificaciones del programa o requerimientos propios del tiempo debemos modificar la estructura de nuestra base de datos, muchas veces no todos los clientes se actualizan al tiempo y es imposible determinar a cada cliente que cambios necesita su base de datos.
En vfp me invente una forma de siempre pasarle al cliente la estructura actualizada independiente de la version del programa que el tuviera. Consiste en tener una base de datos en blanco limpia con los ultimos cambios realizados, esa base de datos se comprime mediante zip y se lo mando al cliente, en el programa el cliente tiene una opcion que lo hace es descomprimir esa base de datos a un carpeta "Update", luego voy haciendo append de cada tabla que esta en la base de datos del cliente a la nueva base de datos y por ultimo paso todo el contenido de la carpeta update a la carpeta DBF que es donde esta mi base de datos reemplazandola.,. no se si me explique bien pero el caso es que funcionaba de maravilla porque no tenia que recordar, campos indices etc.
La pregunta es si es posible hacer algo parecido en mariaDB o de que otra forma  puedo enviarle los cambios que vaya realizando en la base de datos original?

Saludos

Alvaro castellar
Cartagena-colombia

Edwin Duran

unread,
Oct 13, 2017, 10:23:20 AM10/13/17
to Comunidad de Visual Foxpro en Español
Hay una herramienta que es de pago y funciona muy bien Navicat Premium

Dsan

unread,
Oct 13, 2017, 10:32:30 AM10/13/17
to publice...@googlegroups.com
Si no queres pagar busca en el grupo una app que se llama Structure compare algo asi y podes comparar las dos bases  y luego te da un escrip y lo ejecutas 4 minutos lo mas te dilataras al llegar dd el clientes y ver que campo le falta contra la base que tenes esto funciona para mariadb y mysql.

Slds

Dsanchez

Antonio Meza

unread,
Oct 13, 2017, 11:13:42 AM10/13/17
to Comunidad de Visual Foxpro en Español
Creo que realmente tu problema no es que herramienta usar, la realidad no estas siendo bien organizado jajajajaj !!!! 

Es decir, en mi caso, tengo una tabla en la base de datos llamada VERSION esta tabla tiene la siguiente estructura

version
id  version    revision   fecha
1   1.5          2.01         10/10/2017

Y cada vez que modifico algo en la base de datos lo registro en un sistema de control de cambios de la base de datos que me genera un Script para luego poder actualizar a mis clientes, lo que hace realmente es ver la versión de la base de datos del Cliente y revisar cuales cambios le hacen falta y empezar a aplicarlos.

saludos
Antonio Meza

Antonio Meza

unread,
Oct 13, 2017, 11:16:27 AM10/13/17
to Comunidad de Visual Foxpro en Español
Pero si ya tienes el problema, una forma muy económica pues no cuesta nada, solo el tiempo que te lleva comparar de forma manual pero es muy muy rápido.

Uso HeidiSql para exportar la base de datos (sin datos) a un archivo .sql, lo mismo con la otra base que quiero comparar y luego uso un programar también gratis para comparar los dos archivos se llama WinMerge.

saludos
Antonio Meza

alvarocastellar

unread,
Oct 13, 2017, 11:23:28 AM10/13/17
to Comunidad de Visual Foxpro en Español
Gracias amigo antonio, jejej no creo qe sea desorganizacion, sucede que  era la flexibilidad de datos que daba vfp, voy a probar las dos sugerencias que me diste y les estare comentando

Un saludo

Alvaro

Marcelo Barberis

unread,
Oct 14, 2017, 8:33:08 PM10/14/17
to publicesvfoxpro
hola antonio, yo uso heidi como adm y en mis bases de datos uso las vistas, ahora cuando exporto la bd en heidi no me exporta correctamente las vistas sino que las exporta como si fueran tablas, me pasa al momento de restaurar la bd todas las vistas son tablas yo alas tablas les pongo tbl_xxxx y las vistas vw_xxxx hay alguna configuracion mas que hacer para que esto no me pase???
--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

Antonio Meza

unread,
Oct 15, 2017, 4:05:13 PM10/15/17
to Comunidad de Visual Foxpro en Español
Efectivamente HeidiSql no exporta las vistas correctamente, las vistas las actualizo manual y reviso manual.

saludos

Esteban H.

unread,
Oct 15, 2017, 8:54:34 PM10/15/17
to publice...@googlegroups.com

Esta es una excelente herramienta p hacer lo q vos necesitas:

EMS DB Comparer for MySQL

https://www.sqlmanager.net/en/products/mysql/dbcomparer

Es una herramienta de pago, podes bajar la versión full q podes utilizar x 30 días. Yo la he probado con Firebird con su correspondiente versión y el resultado es muy bueno, te permite trabajar sin preocuparme x lo q debes arreglar en el cliente, la herramienta te marca todas las diferencias hasta q quede igual.

 

Saludos

 

Esteban

Carlos Miguel FARIAS

unread,
Oct 16, 2017, 9:38:25 AM10/16/17
to Grupo Fox
Si quieres simplificar la actualización la estructura de la bd, debes aprender a leer la información de metadatos del SGBD que estás usando.
De esa manera, puedes detectar en cualquier momento si la bd tiene la estructura que tu aplicación requiere.
Por supuesto que ese control no es permanente, pero puedes almacenar dentro de la bd una tabla que contengo el # de versión de bd y tu aplicación tiene internamente el # de versión.
Luego, si se detecta discordancia, un usuario administrador de tu sistema (que se identifica ex-profeso para disparar procesos especiales) con los permisos de owner sobre la bd, puede disparar los comandos ALTER para modificar la bd, o crear tablas con nueva estructura y luego re cargarlas desde las tablas viejas (puede necesitarse cargar defaults, casting de datos o conversión de datos, etc.).
Algo que debe manejarse con cuidado (no es imposible) es el manejo de los autoincrementales, sobre todo si debes recrear y recargar las tablas con dichos indices, ya que al recargar, debes copiar los datos si esos constraints y una vez que transferiste los datos, volver a activar el autoincremental y fijarle "el nuevo valor siguiente".
En frameworks como Django te guardan las versiones de base de datos, y cuando cambias el modelo de datos, automáticamente te efectúan el retroceso de conversión (y admite vuelta atrás).
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe.

Antonio Meza

unread,
Oct 16, 2017, 4:33:19 PM10/16/17
to Comunidad de Visual Foxpro en Español
Estaba TOTALMENTE EQUIVOCADO!!! HeidiSql si crea las vistas correctamente!!!! tanto si exportas la base de datos en un solo archivo SQL como si lo haces separado por tablas, si lo haces separado por tablas entonces veras que las vistas van completas, si lo haces por un solo archivo SQL, la crea como tabla temporal pero internamente la convierte y queda igual sin problemas.

Lo comento porque hace un rato hice la prueba de las 2 formas y las vistas se agregaron correctamente.

saludos
Antonio Meza

Francisco

unread,
Oct 17, 2017, 11:11:41 AM10/17/17
to Comunidad de Visual Foxpro en Español
Bueno yo opino de otra manera. Prefiero hacer los cambios en la BBDD mediante ALTER TABLE que se ejecutan cuando por ejemplo el campo no existe o bien es de otro tipo o tamaño. Así lo hago en Fox y así lo he heredado en MySQL y creo que es una manera más o menos parecida a la que utiliza Antonio simplemente que yo soy más gandul y siempre comprueba toda la BBDD sea correcta y hace solo los cambios cuando encuentra diferencias... Por  ponerte un ejemplo en las tablas nativas de fox hacia esto (recorriendo todas las BBDD y todas las tablas):

USE XXXX IN 0 EXCLUSIVE
SELECT XXXX
AFIELDS(mCAMPOS)
nPOSICION=ASCAN(mCAMPOS,'CAMPO_X')
nFILA=ASUBSCRIPT(mCAMPOS,nPOSICION,1)
IF mCAMPOS(nFILA,3)<12 && AMPLIAR CAMPO_X DE 10 A 12
ALTER TABLE XXXX ALTER COLUMN CAMPO_X C(12) NOVALIDATE
ENDIF
IF ASCAN(mCAMPOS,'CAMPO_Y')=0 && SI NO EXISTE CAMPO_Y
ALTER TABLE XXXX ADD COLUMN CAMPO_Y C(10) NOVALIDATE
INDEX ON CAMPO_Y TAG CAMPO_Y ADDITIVE
ENDIF
IF TAGNO("INDICE_X","XXXX")=0
INDEX ON LOQUESEA TAG INDICE_X ADDITIVE
ENDIF
USE IN XXXX
RELEASE mCAMPOS

Pues en MySQL tengo un proceder parecido.

alvarocastellar

unread,
Oct 17, 2017, 11:36:33 AM10/17/17
to Comunidad de Visual Foxpro en Español
Hola franciso la sugerencia tuya y de antonio es la que mas me suena, puedes pasar algun ejemplo que tengas de mysql??

Antonio Meza

unread,
Oct 17, 2017, 12:12:59 PM10/17/17
to Comunidad de Visual Foxpro en Español
Desde luego uso Alter Table si no como las modifico jajajaj 

En mi caso no reviso toda la DB si tengo duda uso rápidamente WinMerge con los archivos exportados con Heidisql y rápidamente encuentro diferencias notables pero eso era antes de organizar el control de cambios.

Ahora como comente solo aplico los que le hacen falta al cliente según su versión.incluso pueden ser catálogos con registros predeterminados.

ejemplo del Script de cambios

* Base Principal

ALTER TABLE `usuarios`
ADD COLUMN `nombre` VARCHAR(100) NOT NULL DEFAULT '' AFTER `usuario`;

DROP TABLE `cfdi_digital`;

CREATE TABLE `ciclos_educativos` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`ciclo_educativo` VARCHAR(20) NOT NULL DEFAULT '',
`clave` CHAR(1) NOT NULL DEFAULT '',
`registro` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=0
;

INSERT INTO `ciclos_educativos` (`id`, `ciclo_educativo`, `clave`, `registro`) VALUES (1, 'Año', 'A', '2017-06-08 18:18:26');
INSERT INTO `ciclos_educativos` (`id`, `ciclo_educativo`, `clave`, `registro`) VALUES (2, 'Semestre', 'S', '2017-06-08 18:18:44');


Esto lo puedo aplicar desde HeidiSql, si no desde un ejecutable pero instrucción por instrucción ya que el driver odbc de Mysql solo permite enviar uno por uno.

Algo así
_sql = "ALTER TABLE `usuarios`
ADD COLUMN `nombre` VARCHAR(100) NOT NULL DEFAULT '' AFTER `usuario`;"

odb.FoxyDb.Sql(_sql, .t.)

saludos
Antonio Meza

El martes, 17 de octubre de 2017, 10:11:41 (UTC-5), Francisco escribió:

Francisco

unread,
Oct 17, 2017, 12:52:19 PM10/17/17
to Comunidad de Visual Foxpro en Español
Exacto Antonio así es como se debería hacer. Ese sistema de cambios que tienes supongo que estará en una tabla libre o algo así?

Antonio Meza

unread,
Oct 17, 2017, 1:28:08 PM10/17/17
to Comunidad de Visual Foxpro en Español
La tengo en MariaDB en desarrollo y por medio de un archivo SQL o una tabla libre hago los cambios al cliente!!! es decir según lo que sea mas rápido, a veces copiar el ejecutable y la tabla libre puede tardar mas que copiar el texto SQL en heidisql jejeje

saludos
Antonio Meza
Reply all
Reply to author
Forward
0 new messages