Jump to content


Photo

[RESUELTO] Capturando Eventos de Firebird desde Delphi


  • Please log in to reply
26 replies to this topic

#21 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 posts
  • LocationMar del Plata / Bs As / Argentina

Posted 04 November 2014 - 11:38 AM

Tengo 2 dudas con este tema:

1° ¿Firebird informa a todos los clientes o solo al que efectua el evento?
2° ¿Es necesario que este activado el form para ejecutar el contenido del evento o aunque este en otro form se ejecutaria de todas formas?

gracias
  • 0

#22 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 04 November 2014 - 12:54 PM

Tengo 2 dudas con este tema:

1° ¿Firebird informa a todos los clientes o solo al que efectua el evento?
2° ¿Es necesario que este activado el form para ejecutar el contenido del evento o aunque este en otro form se ejecutaria de todas formas?

gracias


Saludos.

1.- Firebird informa todos los clientes.
2.- Desde la aplicación capturas la información de que el evento XX ocurrió, ya sería saber donde colocar el componente para recibir la notificación y de ahí ejecutar el proceso o notificar para que se ejecute el proceso.
  • 0

#23 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 04 November 2014 - 01:35 PM

Tengo 2 dudas con este tema:

1° ¿Firebird informa a todos los clientes o solo al que efectua el evento?
2° ¿Es necesario que este activado el form para ejecutar el contenido del evento o aunque este en otro form se ejecutaria de todas formas?

gracias

A ver, partamos de las bases.
En primer lugar el evento no es más que un paquete de datos que Firebird propaga por la red. Como tal, se envía a todos los clientes.
Cuando un cliente recibe dicho paquete puede ignorarlo o no.

Los componentes que se ponen a la "escucha" de tales eventos lo ´único que hacen es comprobar si el nombre de dicho paquete/evento coincide con el de alguna lista. En caso afirmativo el componente dispara un evento (concepto de delphi). Cada quien debe definir una respuesta o que operación realizar ante la recepción del evento. Cada cliente hará lo que considere oportuno, incluso ante un mismo evento.

Básicamente el evento de firebird no es más que un aviso de que "algo" a pasado en la base de datos. Que hacer con ese "algo" ya es responsabilidad de cada uno en definirlo.

Si por activado te refieres a creado, pues si. Si tal componente está dispuesto en el form en cuestión naturalmente el form debe estar disponible. De otro modo no hay forma de leer el evento y dar respuesta. Mientras el componente esté en memoria, disponible y para usarse, no interesa en donde esté mientras sea capaz de recibir el paquete que propaga Firebird.

Saludos,
  • 0

#24 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 posts
  • LocationMar del Plata / Bs As / Argentina

Posted 04 November 2014 - 02:00 PM

gracias por sus respuestas. Voy a probarlo.  (y)
  • 0

#25 balger

balger

    Member

  • Miembros
  • PipPip
  • 17 posts

Posted 23 May 2019 - 04:50 PM

Tengo una duda con respecto a la captura de eventos.

Pongo un ejemplo

Recibo un evento en el cliente y se ejecuta correctamente el evento asociado.

Pero, este evento cliente tarda varios segundo reproduciendo un audio.

¿Si se produce uno o mas del evento en la DB mientras se reproduce el audio? ¿Que sucede?

 

Estoy perdiendo eventos y no se porque. 

Puede haber otra causal de la perdida de eventos.

Hay alguna forma de asegurarse que se reciban los todos eventos 

 

Estoy usando FB2.5 Classic

 

Apreciaré comentarios


  • 0

#26 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 23 May 2019 - 05:13 PM

Tengo una duda con respecto a la captura de eventos.
Pongo un ejemplo
Recibo un evento en el cliente y se ejecuta correctamente el evento asociado.
Pero, este evento cliente tarda varios segundo reproduciendo un audio.
¿Si se produce uno o mas del evento en la DB mientras se reproduce el audio? ¿Que sucede?
 
Estoy perdiendo eventos y no se porque. 
Puede haber otra causal de la perdida de eventos.
Hay alguna forma de asegurarse que se reciban los todos eventos 
 
Estoy usando FB2.5 Classic
 
Apreciaré comentarios


Usando hilos, ¿no?

¿Qué es lo que haces cuando llega una notificación, como reproduces el sonido?

Si pudieras colocar algo de código seguro que se te podría ayudar mejor.

Saludos
  • 0

#27 balger

balger

    Member

  • Miembros
  • PipPip
  • 17 posts

Posted 25 June 2019 - 07:44 PM

Perdon por la tardansa. Pero aca estoy nuevamente.

Egostar. Te comento que uso en una primera instacia el mediaplayer, despues SAPI de microsoft


delphi
  1. // Sound Alert
  2. if Length(mp1.FileName) > 0 then
  3. begin
  4. mp1.Open;
  5. mp1.Wait := True;
  6. mp1.Play;
  7. mp1.Close;
  8. end;
  9.  
  10. if UpperCase(Txt2Voz) = 'S' then
  11. TextoAVoz;


delphi
  1. procedure TfrmMain.TextoAVoz;
  2. //var
  3. //SavedCW: Word;
  4. begin
  5. // http://stackoverflow.com/questions/3032739/delphi-sapi-text-to-speech// Solucion bug division por cero.
  6. // SavedCW := Get8087CW;
  7. // Set8087CW(SavedCW or $4);
  8. SpVoice1.Speak('Atención. ' + qryCall.FieldByName('ll_descripcion').AsString + ', consultorio' +
  9. qryCall.FieldByName('apt_puesto').AsString, 2);
  10.  
  11. // Set8087CW(SavedCW);
  12. // CoUninitialize;
  13.  
  14. end;

Tambien realizo varias operaciones en tabla en local (post),  terminando con una nueva grabacion definitiva post + ApplyUpdates + CommitUpdates.

 

 

Aca la inicializacion de TFDEventAlerter. (Tambien he probado con Synchronize := True)


delphi
  1. dbeventLLAMA_PERSONA.Options.Synchronize := False;
  2. dbeventLLAMA_PERSONA.Unregister;
  3. dbeventLLAMA_PERSONA.Names.Clear;
  4. dbeventLLAMA_PERSONA.Names.Add('LLAMA_PERSONA');
  5. dbeventLLAMA_PERSONA.Register;
  6. dbeventLLAMA_PERSONA.Active := True;
  7. dbeventLLAMA_PERSONA.Options.Timeout := 5000;

Desde ya GRACIAS


  • 0




IP.Board spam blocked by CleanTalk.