Ver Mensaje Individual
  #7  
Antiguo 13-09-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Dado el interés, os dejo aquí la aplicación para leer una Base de Datos Firebird y crear otra con los campos texto con Charset UNICODE_FSS.

Esta aplicación utiliza los componentes FreeIB y está desarrollada en Delphi 6.
Creo que está todo contenido dentro del ZIP.
Además, está la aplicación compilada, lista para utilizar.

Pedirá una base origen y su CharSet.
En mi caso el CharSet es NONE.

La base destino no debería existir, para que la aplicación la cree antes de traspasar los datos de una a otra.

Los Checks arriba a la derecha son todos los datos que se van a traspasar.
Iniciará traspasando los de la primera columna en orden (Generators, Exceptions, Domains, Tables)
Luego hará el "Data Pump" en donde tratará de leer los datos y escribirlos en la base de datos destino.
En este punto podrían darse problemas de "Transliterate". Esto es problemas donde no puede convertir lo que lee en Unicode válido.

Luego de esto, con las tablas pobladas, pasará a crear el resto de estructura de la base (PK, Unique Indices, FK, ...)

Cuando llega a pasar procedimientos, he hecho un algoritmo para tratar de pasarlos en orden de dependencia. Hace cinco pasadas y reordena los procedimientos lo mejor que puede... Espero que no os falle.

A tener en cuenta:
Ya que es un proyecto para mis bases de datos, hay alguna cosa que podría fallar y vuestras bases.

Código Delphi [-]
procedure TFMMain.TraspasarTables;
Si el dominio de un campo de una tabla es IMAGEN, lo crea con el dominio IMAGENES en destino.
Si el dominio de un campo de una tabla es IMAGEN_P, lo crea con el dominio IMAGENES en destino.
Si el dominio de un campo de una tabla es binario (BLOB SUB_TYPE 0), lo crea con el dominio IMAGENES en destino.
Si el dominio de un campo de una tabla es NOTAS_UNICODE, lo crea con el dominio NOTAS en destino.
Si el dominio de un campo de una tabla es PROTECCION, lo crea con el dominio NOTAS en destino.
Si el dominio de un campo de una tabla es APUNTES, lo crea con el dominio NOTAS en destino.
Si el dominio de un campo de una tabla es TEXTO, lo crea con el dominio NOTAS en destino.
Si el dominio de un campo de una tabla es blob tipo texto (BLOB SUB_TYPE 1), lo crea con el dominio NOTAS en destino.

Código Delphi [-]
procedure TFMMain.Pump;
Si el campo se llama ARTICULO reemplazo ñ, Ñ por N. (En mi base de datos, esto es el código de un artículo y no permito esos caracteres.)

Si por algún motivo alguien necesita algo un poco más especial o necesita que quite las transformaciones que he hecho, puede modificar el código y recompilarlo.
Si esto no fuera posible, enviarme un mensaje privado y trataré de adaptar el código.
Si tampoco fuera posible, y sigue fallando nos ponemos en contacto y si me pasáis vuestra base de datos. Con esto seguro que podré hacer las modificaciones necesarias.

Saludos,
Imágenes Adjuntas
Tipo de Archivo: png firebird_clone.png (15,2 KB, 5 visitas)
Archivos Adjuntos
Tipo de Archivo: zip FirebirdClone.zip (387,7 KB, 5 visitas)
Responder Con Cita