[RESUELTO] Capturando Eventos de Firebird desde Delphi
#21
Escrito 04 noviembre 2014 - 11:38
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
#22
Escrito 04 noviembre 2014 - 12:54
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.
#23
Escrito 04 noviembre 2014 - 01:35
A ver, partamos de las bases.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
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,
#24
Escrito 04 noviembre 2014 - 02:00
#25
Escrito 23 mayo 2019 - 04:50
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
#26
Escrito 23 mayo 2019 - 05:13
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
#27
Escrito 25 junio 2019 - 07:44
Perdon por la tardansa. Pero aca estoy nuevamente.
Egostar. Te comento que uso en una primera instacia el mediaplayer, despues SAPI de microsoft
// Sound Alert if Length(mp1.FileName) > 0 then begin mp1.Open; mp1.Wait := True; mp1.Play; mp1.Close; end; if UpperCase(Txt2Voz) = 'S' then TextoAVoz;
procedure TfrmMain.TextoAVoz; //var //SavedCW: Word; begin // http://stackoverflow.com/questions/3032739/delphi-sapi-text-to-speech// Solucion bug division por cero. // SavedCW := Get8087CW; // Set8087CW(SavedCW or $4); SpVoice1.Speak('Atención. ' + qryCall.FieldByName('ll_descripcion').AsString + ', consultorio' + qryCall.FieldByName('apt_puesto').AsString, 2); // Set8087CW(SavedCW); // CoUninitialize; 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)
dbeventLLAMA_PERSONA.Options.Synchronize := False; dbeventLLAMA_PERSONA.Unregister; dbeventLLAMA_PERSONA.Names.Clear; dbeventLLAMA_PERSONA.Names.Add('LLAMA_PERSONA'); dbeventLLAMA_PERSONA.Register; dbeventLLAMA_PERSONA.Active := True; dbeventLLAMA_PERSONA.Options.Timeout := 5000;
Desde ya GRACIAS