Problema raro con Firebird
Hola a todos:
Trabajo con D5, firebird 2.1 y componentes FibPlus. El problema raro es el siguiente y sólo ocurre cuando trato de conectar con una BD Firebird remota: (En local funciona perfectamente) la ruta de conexion que utilizo es: xxx.xxx.xxx.xxx:C:\Directorio\BaseDeDatos.FDB siendo xxx.xxx.xxx.xxx la ip pública de internet. El programa es un mantenimiento de clientes que tiene un componente EventAlerter de Fibplus para que cuando haya algún cambio en los datos del cliente actualice automáticamente el DBGrid de presentación. En la Base de datos es un trigger que está así:
y en el programa, en el OnShow tengo:
en el OnClose tengo:
y en el OnEventAlerter del componente tengo:
Pues bien, si pongo un "exit" al principio de el OnShow y no registra los eventos, el programa funciona perfectamente, sin embargo, si el programa entra por ahí y los registra, se queda colgado en el CLOSE cuando hace la siguiente consulta de clientes:
Repito, sólo cuando registra los eventos. ¿Alguien puede ayudarme? Gracias. |
Ese tema se ha tratado en diversas ocasiones, el problema es que los "eventos" se transmiten por otros puertos que no es el 3050.
Haz una búsqueda por post_event a ver si lo encuentras. |
Gracias Casimiro, me pongo a ello como un loco.
|
También puede ser que estés registrando más de una vez el evento.
El OnShow se ejecuta cada vez que se muestra el formulario (si minimizas y vuelves a maximizarlo o si haces un Form.Hide; Form.Show;). Quizás debas poner el registro de eventos en OnActivate. También puede ser que se esté ejecutando el evento al mismo tiempo que haces un Close y el evento trate de hacer un Refresh. Para probar puedes crear una variable global a la unidad
|
Por fin solucionado:
En el equipo donde está la BAse de Datos: Con el Firebird.Config: Establecer el "Remote Auxc Port" por ejemplo 3051 En el Router: Abrir el puerto 3051 y direccionarlo a la IP local del Servidor donde esta la base de datos 192.168.X.XXX Firewall: permitir/abrir el puerto 3051 Los programas no hay que tocarlos de como registran e interceptan el evento en los anteriores post. Con esto ya se puede acceder remotamente Gracias |
Diuisola
Tal como he comentado, el problema de la conexión (fisica) está resuelto, pero con tu aporte creo que ya está perfecto. Tendré en cuenta tus recomendaciones. Gracias |
En el OnShow y Activate se puede hacer un lío, creo lo mejor es en el OnCreate del Form, (así lo tengo yo).
En el OnClose ( o quizás en el OnCloseQuery si preguntas al usuario), antes de nada, quita el registro de eventos, así no interfiere con el resto de código. Te aconsejo no juegues mucho con el RegisterEvents y el UnRegisterEvents porque pueden hacer pupa (lanzar excepciones), por eso, actívalos una vez y quítalo una vez nada más. Además recuerda que solo puedes registrar 15 eventos por cada EventAlert. Edito: Yo, no suelo hacer eso con los eventos... imagina que uno está editando un registro y le viene un mensaje de refresco... adios edición. Sí puedes poner un botón de refresco, o bien un mensaje de que hay nuevos registros desde la red. Si no usas controles DBaware, entonces sí puedes hacerlo perfectamente. Saludos |
La franja horaria es GMT +2. Ahora son las 01:43:41. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi