Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   database name missing (https://www.clubdelphi.com/foros/showthread.php?t=95250)

mRoman 19-06-2021 00:16:45

database name missing
 
Hola buenas tardes.

Trabajo con: FB 2.0, Delphi6, Win10

Explico, estoy tratando de usar el componente IBEvent para "refrescar" un query q está enlazado en DBGrid de un 1 equipo en RED, la idea es q en este equipo se este actualizando el GRID con los movimientos de inserción que se hagan en las otras terminales.

Me he documentado con el uso del componente y he consultado los siguientes links, entre otro:

https://stackoverflow.com/questions/49918075/firebird-events-and-firewall-issue-tibevents
https://www.clubdelphi.com/foros/showthread.php?t=44493


Lo anterior porque me esta presentando el siguiente problema:
Cita:

Database name missing
Ya configure lo q dicen los links: Abrir el puerto en el Firewall, especifiqué el 6050 asi como en el archivo Firebird.conf )

El componente lo tengo en un formulario MDI que es como el monitor donde el usuario deberá ver los registros que se estén INSERTANDO.

Ya defini el trigger como sigue:

Código SQL [-]
CREATE TRIGGER TRG_ALERT_NEW_COMANDA FOR COMANDA_MAESTRO
ACTIVE AFTER INSERT POSITION 1
AS
begin
  POST_EVENT 'NEW_COMANDA';
end

En el IBEvent en su propiedad "Database" lo tengo enlazado al componente IBDatabase q se encuentra en un Datamodule.
En la propiedad "Name" del IBEvent, tengo registrado el mismo nombre que tengo definido en el trigger (NEW_COMANDA)
Y en "Registered", lo tengo en TRUE.

Al momento de seleccionar el formulario donde se encuentra el componente IBEvent, me salta el error...

Asi mando llamar al formulario:
Código Delphi [-]
procedure TfrmMenuPrincipal.Registro1Click(Sender: TObject);
begin
     if FindComponent('frmMesasAbiertas2') = nil then
           frmMesasAbiertas2:=TfrmMEsasAbiertas2.Create(self);
      frmMEsasAbiertas2.Show;
end;

Usando el Trace, se detiene en esta linea:
Código Delphi [-]
           frmMesasAbiertas2:=TfrmMEsasAbiertas2.Create(self);

Y es aquí donde muestra el mensaje del "Database name missing".

en tiempo de diseño, hago los siguientes cambios en las propiedades del IBEvent: Database hago en enlace al IBDatabase del Datamodule (Esta bien definido), Name escribo "NEW_COMANDA", Registered a True;

Me pudieran orientar...que mas hará falta configurar???

ecfisa 19-06-2021 18:01:16

Hola.

En el TIBEvents pon la propiedad Registered a False.

Saludos :)

Casimiro Notevi 19-06-2021 19:23:51

Cita:

Empezado por mRoman (Mensaje 541391)
Abrir el puerto en el Firewall, especifiqué el 6050

No me suena ese puerto.

mRoman 20-06-2021 01:18:35

Cita:

Empezado por Casimiro Notevi (Mensaje 541397)
No me suena ese puerto.

Hola Casimiro, entre la documentación consultada, lo mencionan también el 3051....pero no sé si es correcto ambos o solo el 3051.

mRoman 20-06-2021 01:19:15

Cita:

Empezado por ecfisa (Mensaje 541396)
Hola.

En el TIBEvents pon la propiedad Registered a False.

Saludos :)

Ok, gracias ecfisa por contestar....

Lo haré asi como me comentas.

mRoman 20-06-2021 01:43:22

Cita:

Empezado por mRoman (Mensaje 541399)
Ok, gracias ecfisa por contestar....

Lo haré asi como me comentas.

Hola...lo aplique como me sugeriste y NO manda ningun error, ya quedó...pero ahora el código q puse en la propiedad IBEventsEventAlert, no se ejecutan
Código Delphi [-]
procedure TfrmMesasAbiertas2.IBEvents1EventAlert(Sender: TObject;
  EventName: String; EventCount: Integer; var CancelAlerts: Boolean);
begin
     qryComandero.Refresh;
     FormShow(Sender);
     ShowMessage('Actualizar grid');
end;

Se supone que las 3 lineas dentro de este procedure, se deberían de ejecutar, pero no lo hace. Que otra debo considerar

mRoman 20-06-2021 02:36:02

Cita:

Empezado por mRoman (Mensaje 541401)
Hola...lo aplique como me sugeriste y NO manda ningun error, ya quedó...pero ahora el código q puse en la propiedad IBEventsEventAlert, no se ejecutan
Código Delphi [-]
procedure TfrmMesasAbiertas2.IBEvents1EventAlert(Sender: TObject;
  EventName: String; EventCount: Integer; var CancelAlerts: Boolean);
begin
     qryComandero.Refresh;
     FormShow(Sender);
     ShowMessage('Actualizar grid');
end;

Se supone que las 3 lineas dentro de este procedure, se deberían de ejecutar, pero no lo hace. Que otra debo considerar

Estoy consultando un hilo de eficsa....sobre esto.
http://www.clubdelphi.com/~marcsc/fo...ad.php?t=78629

...pero creo que no me ayudó mucho, fue un error de declaración del evento. uff...seguire buscando.

ecfisa 20-06-2021 03:43:25

Hola de nuevo.

¿ Registraste los eventos en tiempo de ejecución ?

Código Delphi [-]
  IBEvents1.Database     := IBDatabase1;  
  IBEvents1.AutoRegister := True; 
  IBEvents1.Events.Clear;
  IBEvents1.Events.Add( 'NEW_COMANDA' );
  ...
  IBEvents1.RegisterEvents;

Saludos :)

mRoman 20-06-2021 07:46:33

Cita:

Empezado por ecfisa (Mensaje 541403)
Hola de nuevo.

¿ Registraste los eventos en tiempo de ejecución ?

Código Delphi [-]
  IBEvents1.Database     := IBDatabase1;  
  IBEvents1.AutoRegister := True; 
  IBEvents1.Events.Clear;
  IBEvents1.Events.Add( 'NEW_COMANDA' );
  ...
  IBEvents1.RegisterEvents;

Saludos :)

No...lo haré.

Casimiro Notevi 20-06-2021 13:32:18

El puerto que usa firebird es el 3050, no el 6050 como has puesto antes, supongo que habrá sido un lapsus al teclearlo.
De todas formas, mira este enlace, es algo antiguo pero el funcionamiento es el mismo, ahí te explica puertos y demás.

mRoman 20-06-2021 19:03:15

Ya lo hice...y no marca error...pero sigue sin ejecutar el código del evento EventAlert.

Seguiré buscando...

mRoman 20-06-2021 19:10:41

Cita:

Empezado por Casimiro Notevi (Mensaje 541405)
El puerto que usa firebird es el 3050, no el 6050 como has puesto antes, supongo que habrá sido un lapsus al teclearlo.
De todas formas, mira este enlace, es algo antiguo pero el funcionamiento es el mismo, ahí te explica puertos y demás.

Hola Casimiro.

Efectivamente el puerto de conexión que usa FB es el 3050, pero en la documentación que consulte, hablaban de habilitar (descomentar) dentro del archivo Firebird.conf un puerto auxiliar RemoteAuxPort para las notificaciones, en este caso manejó el 3051 como ejemplo y en otra link usaron el 6050...considero q cualquiera de los 2 funciona...

Aqui el link.

Casimiro Notevi 20-06-2021 20:14:28

No veo lo del 6050, y el enlace que indican ahí es el mismo que he puesto yo.

ecfisa 20-06-2021 23:38:19

Hola.

Aparte de descomentar el RemoteAuxPort XXXX en el archivo firebird.conf ¿ Abriste el mismo puerto desde el firewall de Windows ?

Saludos :)

mRoman 21-06-2021 23:37:08

Cita:

Empezado por ecfisa (Mensaje 541409)
Hola.

Aparte de descomentar el RemoteAuxPort XXXX en el archivo firebird.conf ¿ Abriste el mismo puerto desde el firewall de Windows ?

Saludos :)

Si, también ahí lo hice.

Pero sigue sin ejecutar el código ingresado en el evento EventAlert

mRoman 03-07-2021 04:45:19

Solucionado
 
Hola...

Continuando con este hilo...

En el evento del IBEvent (OnEvenAlert), lo registré asi.

Código Delphi [-]
procedure TfrmMesasAbiertas2.IBEvents1EventAlert(Sender: TObject;
  EventName: String; EventCount: Integer; var CancelAlerts: Boolean);
begin
     if EventName='NEW_COMANDA' then
     begin
        RefreshComandero();
     end;
end;

Lo que hice al final fue configurar una PC como terminal donde los MESEROS capturan las comandas y al momento de CERRAR LA CUENTA, se debe actualizar el COMANDERO -el cual esta en la caja (Servidor)-, previo a esto, estuve haciendo pruebas de otra cosa como la comunicación entre equipos dentro de la RED, lo cual al principio no se veían las PC entre ellas, lo anterior derivado del Firewall, lo desactive momentáneamente y fue así como las PC se vieron entre si -haciendo ping-.

Pues asi deje esta configuración del Firewall y empecé a terminar el proceso que había iniciado con las Alertas para q el comandero se actualizará cuando el MESERO cerrara la cuenta....YA LO HACE, YA ACTUALIZA EL COMANDERO!!., por lo tanto CREO que esto estaba intefiriendo con las alertas....ahora lo realiza sin problemas.

Esto hace el procedimiento "RefreshComandero()"
Código Delphi [-]
procedure TfrmMesasAbiertas2.RefreshComandero;
begin
    qryComandero.Close;
    qryComandero.Open;
end;

Que es ejecutado cada vez que un MESERO cierra la cuenta de un COMENSAL.

Sin duda habrá alguien mas que sea mas preciso en lo que he descrito y nos comente si lo del firewal tuvo algo que ver....

Saludos.


La franja horaria es GMT +2. Ahora son las 00:26:05.

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