PDA

Ver la Versión Completa : Migrando de InterBase a Firebird


Carmelo Cash
12-05-2014, 19:49:17
Hola Foro:

Trabajo con Delphi 7 y he comenzado la migración de un sistema que utiliza InterBase 6.0 y se conecta con BDE 5.01.

Actualmente para conectarme utilizo un TDatabase de la paleta BDE y para las consultas utilizo (cientos de) TQuery tambien de la paleta BDE.

Ya hice la migración de la Base de datos a Firebird

Para conectarme probé usar un TIBDatabase + TIBTransaction de la paleta InterBase. Hasta acá va bien.

El problema surge cuando quiero conectar los (cientos de) Tquery con el TIDataBase. No lo logro.

Encontré que puedo usar TIBQuery de la paleta InterBase, pero esto me obligaría a reemplazar todos los Tquerys que tengo por nuevos.

Leí en otros hilos que migrar de InterBase a Firebird es sencillo, entonces esta es la pregunta:


¿que tengo que reemplazar los cientos de Tquerys por TIBQuerys?
o
¿me puedo conectar de otra manera que no signifique hacer este engorroso trabajo?

Desde ya muchas gracias por su atención.

Casimiro Notevi
12-05-2014, 20:43:18
En teoría, no tienes que tocar nada en el programa.

Con interbase instalado, haces un backup transportable de la base de dato.
Desinstala interbase completamente y borras gds32.dll
Instalas firebird.
Restauras el backup.
Se acabó.

ecfisa
12-05-2014, 20:57:52
Hola Carmelo Cash.

¿que tengo que reemplazar los cientos de Tquerys por TIBQuerys?

Es lo que yo te aconsejaría sin dudarlo.
¿me puedo conectar de otra manera que no signifique hacer este engorroso trabajo?
En principio sería posible compartir el handle de un TDatabase con el TIBDatabase. Pero, aunque resulte un trabajo engorroso migrar los componentes, es preferible a trabajar con ese tipo de engendros y los futuros rompederos de cabeza que te va a traer...

Saludos :)

Casimiro Notevi
12-05-2014, 22:25:05
Edito, no me había fijado en los componentes:
En teoría, no tienes que tocar nada en el programa.
Aunque los componentes debes cambiarlo, como indica ecfisa.

Y también, antes, haces el traspaso de la base de datos de interbase a firebird:
Con interbase instalado, haces un backup transportable de la base de dato.
Desinstala interbase completamente y borras gds32.dll
Instalas firebird.
Restauras el backup.

Caral
13-05-2014, 04:05:15
Hola
Hay que tener en cuenta que los tQuery trabajan con texto, osea se pueden leer como tal.
Entendido esto es facil darse cuenta que si un query contiene una sentencia sql (que es texto) se puede leer y pasar a otro query, sea del componente que sea.
Por consiguiente:
Si se tienen miles de querys lo único que se necesita es colocar uno solo en el datamodule y pasarle el texto que contenga en el momento que se necesite (bien pueden ser dos o tres máximo :D)
Sera muy rara la ocasión en la que mas de un query este conectado a la vez, es mas, es una mala practica hacerlo.
Osea:
No se necesita cambiar nada al programa simplemente la conexión la hará el nuevo componente sin necesidad de complicarse la vida.
Muy a lo novato, lo se......:)
Saludos

RONPABLO
13-05-2014, 04:35:30
Hola
Hay que tener en cuenta que los tQuery trabajan con texto, osea se pueden leer como tal.
Entendido esto es facil darse cuenta que si un query contiene una sentencia sql (que es texto) se puede leer y pasar a otro query, sea del componente que sea.
Por consiguiente:
Si se tienen miles de querys lo único que se necesita es colocar uno solo en el datamodule y pasarle el texto que contenga en el momento que se necesite (bien pueden ser dos o tres máximo :D)
Sera muy rara la ocasión en la que mas de un query este conectado a la vez, es mas, es una mala practica hacerlo.
Osea:
No se necesita cambiar nada al programa simplemente la conexión la hará el nuevo componente sin necesidad de complicarse la vida.
Muy a lo novato, lo se......:)
Saludos


lo dificil de cambiar de TQuery a un TIBQuery radica en que muchos componentes TQuery pueden tener eventos programados, también pueden tener campos personalizados en el editor de campos.

Yo miraría la posibilidad de hacer la conexión por medio de ADO y seguiría usando los TQuerys.

RONPABLO
13-05-2014, 04:38:43
lo dificil de cambiar de TQuery a un TIBQuery radica en que muchos componentes TQuery pueden tener eventos programados, también pueden tener campos personalizados en el editor de campos.

Yo miraría la posibilidad de hacer la conexión por medio de ADO y seguiría usando los TQuerys.


bueno, teniendo en cuenta que tenga mucha programación, de lo contrario, si los TQuerys están solos con las consultas y no tienen eventos o cosas similares ahí si me quedaría con los componentes IBX y dejaría los del BDE a un lado

Caral
13-05-2014, 05:11:53
Hola
Creo que es logico pensar que la mejor manera de programar un query es por medio de la generación del texto por código y no usando su propio editor ya que asi se puede usar una y otra vez el query en el mismo programa, ademas de ser mas limpio y facil de entender.
Si partimos de que la persona que pregunta tiene muchos query en su programa podemos pensar que no es un programador avanzado (como yo), por consiguiente dudo que tenga eventos programados, campos personalizados, vistas u otros menesteres.
Usando esta analogia si simplemente se le cambia la ubicación al nuevo query (en el datamodule) y se le nombra igual que el query al que se reemplazara el programa no se dara cuenta de que paso, simplemente usara el nuevo query con su nueva conexión.
Para mi es lo mas sencillo, mas teniendo en cuenta que revisar y cambiar todos los componentes de un programa sera una labor ardua y se necesitara probarlo muy bien por si algo quedo suelto, que sera muy probable.
Como siempre metiéndome en camisa de once varas....:D
Saludos

RONPABLO
13-05-2014, 06:59:27
Hola
Creo que es logico pensar que la mejor manera de programar un query es por medio de la generación del texto por código y no usando su propio editor ya que asi se puede usar una y otra vez el query en el mismo programa, ademas de ser mas limpio y facil de entender.
Si partimos de que la persona que pregunta tiene muchos query en su programa podemos pensar que no es un programador avanzado (como yo), por consiguiente dudo que tenga eventos programados, campos personalizados, vistas u otros menesteres.
Usando esta analogia si simplemente se le cambia la ubicación al nuevo query (en el datamodule) y se le nombra igual que el query al que se reemplazara el programa no se dara cuenta de que paso, simplemente usara el nuevo query con su nueva conexión.
Para mi es lo mas sencillo, mas teniendo en cuenta que revisar y cambiar todos los componentes de un programa sera una labor ardua y se necesitara probarlo muy bien por si algo quedo suelto, que sera muy probable.
Como siempre metiéndome en camisa de once varas....:D
Saludos

Teniendo en cuenta que él dice:
Hola Foro:

Trabajo con Delphi 7 y he comenzado la migración de un sistema que utiliza InterBase 6.0 y se conecta con BDE 5.01.

Actualmente para conectarme utilizo un TDatabase de la paleta BDE y para las consultas utilizo (cientos de) TQuery tambien de la paleta BDE.


Creo que puede estar en un punto en el que yo estuve hace varios años y fue migrar de paradox a MySQL y luego a Firebird, en ese momento la aplicación usaba los TTable (algo muy malo que pone muy lento la aplicación), pero afortunadamente no tenía programación en los eventos de dichos componentes aunque si tenida muchos campos editados, el cambiar de base de datos (2 veces) fue un proceso largo, monótono y tedioso ya que se tenía cientos de componentes TTable, unos pasaron casi derecho, solo era poner con el mismo nombre el componente TTable, pero muchos más tenían algunas referencias maestro detalle que no fueron muy transparentes... Particularmente creo que hay que ver cual es el caso particular en los cientos de TQuerys que tiene.

Carmelo Cash
13-05-2014, 22:13:44
Gracias a todos los que ayudaron.

Les comento que hice. Hice lo que dijo Casimiro

"En teoría, no tienes que tocar nada en el programa....."

Luego de instalar fb, Instalé el BDE en una pc con windows 7, copié la aplicación y se conectó y abrió y funcionó rapidísimo y se pinchó. :eek:

En realidad funciona todo menos un proceso que genera facturas, luego de generar alrededor de 2000 (dosmil) me aparece "OUT of memory" :confused:

En la versión de InterBase para XP genera sin problema 8000 (ochomil) y no da ese error.

Ahora no sé si tratar de detectar y solucionar ese error o cambiar todos los componentes y ver si será eso.

Carmelo Cash
13-05-2014, 22:15:51
Se me olvido decir que aveces aparece

"Out of memory" y otras veces

"Out of memory while expanding memory stream"

Carmelo Cash
14-05-2014, 02:43:34
Bueno, encontré el problema, era un TMemoryStream que creaba al crear el formulario y lo liberaba al cerrarlo.
Ahora lo creo y lo libero cuando lo voy a usar y listo. ya se arreglo.

Ahora hay que ver otras cositas pero creo que ya estamos

Gracias mil por todo.