Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Disparador no funciona en Internet (https://www.clubdelphi.com/foros/showthread.php?t=79543)

Diego827 15-07-2012 09:39:02

Disparador no funciona en Internet
 
Hola amigos del Club, en mi país ya son las dos de la mañana y realmente no encuentro solución a mi problema que es el siguiente:

Tengo un programa hecho en c++ builder, este se conecta a una base de datos Interbase SMP 2009. El programa posee un form con una tabla en la que se actualiza automáticamente (es una ventana padre y uno puede crear ventanas hijas), a travez de un IBEvents, y en la base de datos hay un disparador que se dispara luego de una inserción (usa el nombre de "NEWREG"). Entonces en el evento OnEventAlert del IBEvents esta el siguiente código:

Código:

        for (int i = MDIChildCount - 1; i >= 0; i--) {
                if (EventName == "NEWREG") {
                        TIBDataSet *DATASET1 =
                                static_cast<TIBDataSet*>
                                (MDIChildren[i]->FindComponent("IBDataSet1"));
                                if (DATASET1->SelectSQL->Text!="") {
                                        DATASET1->Active = false;
                                        DATASET1->Active = true;
                                }
                }

El código anterior lo que hace es que si por lo menos hay una ventana hija abierta, esta actualizará sus datos al cerrar y abrir el dataset.

En una LAN o red interna todo de lujo, pero cuando se intenta en Internet nunca llega la alerta así que nunca se actualiza el listado.

Por favor, ayúdenme como siempre. Gracias. (creo que se me nota la preocupación :( )

mightydragonlor 15-07-2012 18:59:21

El problema realmente tiene que ver con la infraestructura, específicamente con el firewall, firebird usa cierto puerto para los eventos, si el firewall cliente o servidor bloquean ese puerto la comunicación no se puede lograr, creo que debes buscar por acá, puesto no puedo darte mas información, como que puerto es, o como se configura, en fin, se que ya había leído al respecto, pero no recuerdo donde.

Saludos.

Casimiro Noteví 15-07-2012 19:19:48

Tampoco recuerdo en qué hilo se habló del tema, fue hace poco, pero no lo encuentro, de todas formas echa un vistazo a este documento, ahí se explica.

Diego827 15-07-2012 20:15:29

Muy agradecido
 
Cita:

Empezado por mightydragonlor (Mensaje 437482)
El problema realmente tiene que ver con la infraestructura, específicamente con el firewall, firebird usa cierto puerto para los eventos, si el firewall cliente o servidor bloquean ese puerto la comunicación no se puede lograr, creo que debes buscar por acá, puesto no puedo darte mas información, como que puerto es, o como se configura, en fin, se que ya había leído al respecto, pero no recuerdo donde.

Saludos.

Gracias por tu respuesta compañero, tienes toda la razón; debe ser un puerto. Como siempre, me pase de listo y se me olvido que estoy incluso haciendo NAT!!! y obviamente tengo que habilitar un puerto para que se emita la debida "Batiseñal"... toda la razón compañero!

Diego827 15-07-2012 20:16:39

Muchas gracias
 
Cita:

Empezado por Casimiro Notevi (Mensaje 437483)
Tampoco recuerdo en qué hilo se habló del tema, fue hace poco, pero no lo encuentro, de todas formas echa un vistazo a este documento, ahí se explica.

Ok, ahora veo el enlace Casimiro; cuando logre resolver posteo la solución para que quede registrada de nuevo!!!

Diego827 15-07-2012 20:25:55

Les comento...
 
Hola de nuevo.

Resulta que vi tu documento estimado Casimiro; empero no dice la solución explicita sino más bien me dice cual es mi problema, seguiré buscando y posteo.

Diego827 15-07-2012 20:41:37

Encontré algo
 
Amigos,

¿es este hilo al que se referían?

http://www.clubdelphi.com/foros/show...et%2C+firewall

Comento luego, voy a probar jeje :rolleyes:

Diego827 15-07-2012 21:18:48

Equivalente en InterBase
 
Hola,

Leyendo encontré que lo que hay que hacer es fijar el puerto auxiliar denominado en firebird "RemoteAuxPort" pero no encuentro esto en Interbase, por favor; alguien me puede decir como configurar de forma equivalente este puerto en Interbase, por favor?

Gracias amigos.

mightydragonlor 15-07-2012 21:24:30

Para Firebird es el archivo firebird.conf, supongo que para interbase es interbase.config xD, se encuentra en la carpeta de instalación.

Saludos.

Diego827 15-07-2012 21:39:23

jaja probe antes de postear eso
 
Gracias amigo, pero eso ya lo intente y nada que ver. en cambio encontre Ibconfig, no se si será pero no encuentro nada que tenga el nombre de puerto auxiliar... debe ser otro o que se yo :(

Casimiro Noteví 15-07-2012 21:56:36

Tendrás que mirar la documentación de interbase, no te queda otra.

Diego827 15-07-2012 22:17:02

te soy honesto amigo mío
 
Cita:

Empezado por Casimiro Notevi (Mensaje 437496)
Tendrás que mirar la documentación de interbase, no te queda otra.

Ya me mate buscando la forma de modificar o por lo menos encontrar ese puerto del diablo :eek: y no lo encuentro :( .

Para serte honesto no se ni porque sigo con interbase :mad:

Sigo en mi busqueda y cuando encuentre la respuesta posteo, si llegan a saber algo me cuentan amigos ;).

Gracias y luego posteo :rolleyes:

Diego827 16-07-2012 01:05:07

Consejo
 
Estimados amigos, necesito un consejo:

La parte de actualizarse automáticamente realmente es necesaria para mí, y ya re leí toda la documentación de Interbase y no logro con toda franqueza lograr redireccionar los eventos de los trigger.

Por ello, necesito un consejo: ¿que tan fácil sería por la razón anterior, migrar una base de datos de apenas 8 mb (32000 reg aprox) a Firebird? que tantas cosas debo cambiar? o sería fácil? Tan fácil como sólo hacer la migración, crear los usuarios, estructuras, relaciones y migrar los datos y listo? no debo cambiar nada en mi aplicación? pregunto porque obviamente los componentes IB express se utilizan en ambas bases de datos pero para ser honesto nunca he usado firebird, no se si es fácil instalar el cliente o como es la administración del servidor...
Me pueden dar consejo? Gracias amigos.

Casimiro Noteví 16-07-2012 02:22:27

- Primero haz una buena copia de seguridad, por si acaso.
- Haces un backup transportable con interbase: gbak -b -v -t -user sysdba -password masterkey basedatos.gdb basedatos.gbk
- Desinstalas interbase y borras gds32.dll que estará en el directorio windows\system32
- Instalas firebird
- Recuperas el backup transportable: gbak -c -v -p 8192 -user sysdba -password masterkey basedatos.gbk basedatos.fdb
- Conectas y prueba.

Si no haces uso de "algo extraño" entonces serán totalmente compatibles.

Diego827 16-07-2012 02:25:36

Muchas gracias
 
Ok, entendido Casimiro (buen fast-tutorial).

Y con eso de "usos extraños", cuando somos novatos hacemos unas cosas que ni te digo :eek:. Voy a hacer lo que me dices. Agradezco tu atención :D.

Te comento mis resultados.

cointec 16-07-2012 18:34:33

Hola, lo que ha comentado Casimiro no creo que funcione. Los archivos de backup entre interbase y Firebird son incompatibles.

Para poder hacer la migración te aconsejo lo siguiente:

1. Extraer el metadata de la base de datos de interbase. Lo puedes hacer con ibconsole o con otras herramientas. Yo lo he realizado con ibexpert.
2. Instalar Firebird en otro puerto distinto al 3050, y ejecutar el script con el metadata para crear una base de datos vacía en Firebird. Dependiendo de la calidad del "metadata" puede que no requiera modificaciones. Firebird es mas estricto en el uso del lenguaje DML, por lo que puede que tengas que modificar cosas.
3. Una vez que tengas la base de datos vacía en Firebird, utiliza una herramienta como ibpump y vuelca los datos. Es importante para este paso que tengas instalados los 2 motores.
4. Si todo ha ido bien, prueba tu aplicación, ya que como he comentado antes, Firebird es mas estricto y puede que tengas que cambiar algo.
5. Si todo ha ido bien, des instala interbase y cambia Firebird al puerto 3050.

Con la librería gds32.dll de Firebird, puedes acceder desde ibpump y desde tu aplicación a ambos motores, cosa que no puede ser con la de interbase.

Un saludo, jesus

Casimiro Noteví 16-07-2012 19:49:21

Cita:

Empezado por cointec (Mensaje 437570)
Hola, lo que ha comentado Casimiro no creo que funcione. Los archivos de backup entre interbase y Firebird son incompatibles.

¿Desde qué versión son incompatibles?, creo recordar que hasta la IB7.5 y FB1.5 eran totalmente compatibles.

Diego827 17-07-2012 15:10:12

Precaución ante todo
 
Lo que voy a hacer es realizar pruebas en mi casa, en una pc aparte y comento.

cointec 18-07-2012 20:06:20

Puede que sean compatibles interbase 6 y Firebird 1, ya que no hubo cambios en el ODS, aunque no lo he probado. Interbase 7.x ya no es compatible con ninguna versión de Firebird. Este si lo he probado.

Casimiro Noteví 18-07-2012 20:10:04

Por lo que veo está usando Interbase SMP 2009, por lo que no es compatible directamente.
Tendrá que extraer el metadata, adaptarlo en lo que sea necesario para firebird y luego copiar los datos con ibpump (por ejemplo).
No es complicado tampoco, aunque no es tan cómodo como hacer un backup/restore.


La franja horaria es GMT +2. Ahora son las 06:24:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi