PDA

Ver la Versión Completa : eventos en interbase no funciona en red


kapcomx
12-09-2012, 00:06:53
ke tal amigos del Foro, tengo un pequeño problemilla que no mas no doy con la solucion. Les comento
estoy haciendo uso de un evento que me actualize una grid una lista de servicios.

cuando lo ejecuto en la maquina que contiene la bd de manera local funciona de maravilla, pero cuando hago la prueba en red simplemente no jala.

estoy trabajando en XE2, interbase 7, IbExpert

1. en el ibExpert hice un trigger after update sobre la tabla que necesito
AS
begin
POST_EVENT 'preparar_orden';
end

2. ya en delphi agregue en el Datamodule un componente ibEvents lo relacione con el componente ibdatabse el cual se llama "DB"
este a su vez tiene en la propiedad databasename la ruta del archivo de base de datos "C:\micarpeta\mibase.NXT"

3. el ibevent tiene agregado el evento 'preparar_orden'
4. en el oneventalert le puse el sig codigo
if eventname='preparar_orden' then
begin
frmsolicitarcuenta.mensaje;
dm.dsorden_det.Close;
dm.dsorden_det.SelectSQL.Clear;
dm.dsorden_det.SelectSQL.Text :='Select * from orden_det where fk_estatus=7' ;
dm.dsorden_det.Open;
end;

y por ultimo en el formulario donde tengo la dbgrid que se tiene que actualizar puse en el onshow

dm.eventorden.Events.Add('preparar_orden');
dm.eventorden.RegisterEvents;


y eso estodo amigos. lo ejecuto en la misma maquina y toda va de maravilla.
ahora cuando cambiola ruta de la base de datos a
"nombrepc:C:\micarpeta\mibase.NXT"
ahi empieza el problema simplemente no avisa nada..........

que sera estare omitiendo algo que se necesita para el trabajo en red....

Espero me puedan ayudar

Saludos...:cool:

Casimiro Notevi
12-09-2012, 00:57:12
No he entendido bien el problema, pero me parece que cuando abres un formulario quieres traerte unos datos con un select.
Si es así, ¿para qué quieres el trigger, el ibevent, etc.?, ¿por qué no, simplemente, haces el select al abrir el formulario y punto, nada más?

MartinS
12-09-2012, 01:29:18
Hola: creo que esta buscando un "autorefresh" de las grillas de toda la red.

Recordas el post de 88 mensajes del refresco automatico?

ecfisa
12-09-2012, 01:41:24
Hola kapcomx.

Una consulta, ¿ Agregaste un puerto auxiliar para las excepciones en el firewall del servidor ?

Si no es así agrega uno, por ejemplo:

Protocolo : TCP
Numero de puerto : 4010


Luego busca el archivo Firebird.conf, que encontrarás en C:\Program Files\Firebird\Firebird_2_5 (para la versión 2.5).
Abrilo con el notepad, busca RemoteAuxPort (debajo de RemoteServicePort) y dale el numero de puerto que agregaste en el firewall

#RemoteAuxPort = 4010

Con eso tendría que funcionar.

Saludos. :)

MartinS
12-09-2012, 01:44:17
Luego busca el archivo Firebird.conf, que encontrarás en C:\Program Files\Firebird\Firebird_2_5 (para la versión 2.5).
Abrilo con el notepad, busca RemoteAuxPort (debajo de RemoteServicePort) y dale el numero de puerto que agregaste en el firewall

#RemoteAuxPort = 4010

Con eso tendría que funcionar.

Saludos. :)

Me parece que el gaucho usa Interbase... desconozo cual es el config para esa base.-

ecfisa
12-09-2012, 01:49:34
Me parece que el gaucho usa Interbase... desconozo cual es el config para esa base.-
Tenes razón:
estoy trabajando en XE2, interbase 7, IbExpert
No presté atención al detalle la primera vez que leí... :o

Pero tal vez no sea muy diferente en Interbase y creo que por ahí vienen los tiros...

Saludos. :)

MartinS
12-09-2012, 01:59:37
Tenes razón:

No presté atención al detalle la primera vez que leí... :o

Pero tal vez no sea muy diferente en Interbase y creo que por ahí vienen los tiros...

Saludos. :)

Si creo que si.
Yo en aquella ocasion el refresco lo hacia al dataset, es decir, el datasource.dataset.refresh, pero en definitiva era mas o menos asi. Otra cosa en #RemoteAuxPort = 4010 hay que sacarle el # si no no funciona.. :D

Igual esto de eventos lo hice una vez para ayudar a los compañeros del foro asi que mucho no sé. Esperemos a ver que dice kapcomx

Saludos

kapcomx
12-09-2012, 17:01:10
ke tal compañeros, Agradezco muchisimo el interes a mi pregunta, pero aun con su ayuda no he encontrado una solución,
Penosamente no uso Firebird, y no he encontrado aún el equivalente a un puerto auxiliar en interbase.

seguire buscando, aver si logro hacer que esto funcione y les ire posteando lo que encuentre.

P.D: MartinS cual es ese post d 88 mensajes...:confused:

MartinS
12-09-2012, 17:17:36
Hola Kapcomx: este (http://www.clubdelphi.com/foros/showthread.php?t=78586) es el enlace al post de los 88 mensajes donde tratamos el tema de manejo de eventos precisamente a partir de la hoja 4. Estan todos los pasos desde cero para poder hacer los refrescos automaticamente. Podras ver que el mensaje final me surgio el inconveniente que la consulta se moria y el servidor no respondia entonces en este otro de ecfisa (http://www.clubdelphi.com/foros/showthread.php?t=78629) y a partir del mensaje 17 se encontró la solucion que era lo que decimos en este hilo con la edicion del archivo firebird.conf gracias a los aportes de casimiro y delphius.-

Saludos

Pd estuve buscando lo equivalente para interbase pero no encontré nada justamente lo que solicita diego827 al final.-

ecfisa
12-09-2012, 17:27:35
Hola kapcomx.

En realidad podrías prescindir de especificar el RemoteAuxPort, ya que Interbase (y Firebird por herencia) seleccionarán un puerto al azar para el envío de mensajes. En el caso de Firebird este comportamiento dió lugar a problemas que se solucionaron especificando un único puerto para el tráfico de eventos.
Es decir, Firebird maneja los mensajes sin necesidad de especificar el puerto auxiliar en Firebird.conf, pero puede acarrear problemas por lo que es aconsejable hacerlo.

No he leído que Interbase tenga ese problema, lo que sí podría ser, es que el firewall de windows estuviese bloqueando todo puerto no utilizado y de ese modo Interbase no podría encontrar uno para la transmisión de mensajes.
Creo, aunque sin tener la certeza por no usar Interbase, que agrengando una excepción de puerto (TCP) desde el firewall tendría que funcionarte.

Saludos.

MartinS
12-09-2012, 17:34:56
Hola kapcomx.

En realidad podrías prescindir de especificar el RemoteAuxPort, ya que Interbase (y Firebird por herencia) seleccionarán un puerto al azar para el envío de mensajes. En el caso de Firebird este comportamiento dió lugar a problemas que se solucionaron especificando un único puerto para el tráfico de eventos.
Es decir, Firebird maneja los mensajes sin necesidad de especificar el puerto auxiliar en Firebird.conf, pero puede acarrear problemas por lo que es aconsejable hacerlo.

No he leído que Interbase tenga ese problema, lo que sí podría ser, es que el firewall de windows estuviese bloqueando todo puerto no utilizado y de ese modo Interbase no podría encontrar uno para la transmisión de mensajes.
Creo, aunque sin tener la certeza por no usar Interbase, que agrengando una excepción de puerto (TCP) desde el firewall tendría que funcionarte.

Saludos.

Puede ser... Ahora pregunto: ¿se da una exepción al azar de un puerto o alguno especifico? :confused:

Saludos

ecfisa
12-09-2012, 17:52:36
Puede ser... Ahora pregunto: ¿se da una exepción al azar de un puerto o alguno especifico? :confused:

Saludos
Errores de red genéricos y conflictos con firewall.

RemoteAuxPort

The inherited InterBase behavior, of passing event notification messages back to the network layer through randomly selected TCP/IP ports, has been a persistent source of network errors and conflicts with firewalls, sometimes to the extent of causing the server to crash under some conditions. This parameter allows you to configure a single TCP Port for all event notification traffic.

The installation default (0) retains the traditional random port behaviour. To dedicate one specific port for event notifications, use an integer which is an available port number.


Saludos.

MartinS
12-09-2012, 18:00:29
Ufa!!! porque siempre me responden en ingles!! :D:D:D

Gracias al traductor de google

El comportamiento heredado InterBase, de transmitir los mensajes de notificación de eventos de regreso a la capa de red seleccionados al azar a través de los puertos TCP / IP, ha sido una fuente constante de errores de red y los conflictos con los cortafuegos, a veces hasta el punto de provocar el bloqueo del servidor bajo ciertas condiciones. Este parámetro le permite configurar un único puerto TCP para todo el tráfico de notificación de eventos.

El valor por defecto (0) conserva el comportamiento tradicional puerto aleatorio. Dedicar un puerto específico para notificaciones de eventos, utilizar un número entero que es un número de puerto disponible.

Aun no entiendo :mad:, dice que por defecto es cero y se puede dedicar un puerto para notificaciones de eventos... ¿ y donde se configura?, ¿se pone una execpcion por ejemplo al firewall al puerto 6010 e interbase la reconoce como libre?

Saludos

kapcomx
12-09-2012, 18:14:16
compañeros agradezco mucho su interes, voya intentar abrir unos puertos y les cuento como me fue

Saludos...:cool:

ecfisa
12-09-2012, 18:23:24
Hola MartinS.
¿ y donde se configura?, ¿se pone una execpcion por ejemplo al firewall al puerto 6010 e interbase la reconoce como libre?
Siempre hablando de Firebird, se configura en el archivo Firebird.conf, dándole un valor al parámetro RemoteServicePort. Este valor debe coincidir con el valor que se asigno a la excepción de puerto añadida en el firewall de windows para ese efecto.

Si no se asigna un valor a RemoteServicePort, Firebird eligirá un puerto disponible y de no haber ninguno no podrá enviar los eventos. Por ese motivo le sugerí a kapcomx que se asegure desde el firewall que haya al menos un puerto disponible a ese fín.

Saludos.