PDA

Ver la Versión Completa : Disparador no funciona en Internet


Diego827
15-07-2012, 09:39:02
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:


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 Notevi
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 (http://www.intitec.com/varios/the-power-of-firebird-events.pdf) documento, ahí se explica.

Diego827
15-07-2012, 20:15:29
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
Tampoco recuerdo en qué hilo se habló del tema, fue hace poco, pero no lo encuentro, de todas formas echa un vistazo a este (http://www.intitec.com/varios/the-power-of-firebird-events.pdf) 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
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
Amigos,

¿es este hilo al que se referían?

http://www.clubdelphi.com/foros/showthread.php?t=78629&highlight=Trigger%2C+interbase%2C+firebird%2C+internet%2C+firewall

Comento luego, voy a probar jeje :rolleyes:

Diego827
15-07-2012, 21:18:48
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
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 Notevi
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
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
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 Notevi
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
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 Notevi
16-07-2012, 19:49:21
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
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 Notevi
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.