Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2005
Aldo Aldo is offline
Miembro
 
Registrado: ene 2004
Posts: 46
Poder: 0
Aldo Va por buen camino
Problema con los Post_Events

Hola a todos

Espero poder recibir ayuda de cualquiera que tenga un poquito de tiempo y pueda dedicarlo a entender el problema que tengo.

Es un caso curioso que me trae de cabezas con el tema.

Las condiciones de trabajo son las siguientes:
Delphi 5
Firebird 1.0
IB_Objects

Con todo esto tengo una aplicación Cliente Servidora bastante grande, pero el caso que me está presentando el problema está relacionado fundamentalmente con una agenda.

El objetivo es que cada vez que un usuario crea, edita, elimina o mueve una cita en la agenda de un día a otro, se envía un POST_EVENT para que todas las aplicaciones que tengan abiertas la agenda y con ayuda de una tabla auxiliar donde se guarda que día o días de la agenda son los implicados en la actualización, puedan recibir el evento y refrescar la agenda si se encuentran posicionados en uno de los días modificados.

Esto es así para evitar tener que estar refrescando constantemente la agenda en aquellos clientes que no estén visualizando ninguno de los días involucrados en la última actualización, ya que si el usuario estuviera en un día distinto a los modificados y fuera a uno de ellos, al entar en ese día, se cargan todas las citas y las últimas modificaciones ya serán cargadas también.

El problema se presenta ocasionalmente ( no siempre ) y consiste en que deja de funcionar correctamente. Osea que la aplicación cliente no recibe los eventos enviados desde el servidor.

He detectado que se restablecen todas las condiciones iniciales si detengo e inicio nuevamente el servicio de interbase en el servidor y después de hacer un backup y restore de la base de datos.

Os pongo un fragmento de como tengo programado todo lo relacionado con el componente TIB_Event ( IB_Objects ) en toda la aplicación para tener más claro todos los aspectos que pueden intervenir en el fallo aleatorio que presento.

En el DFM del Datamodule: Las propiedaes que están establecidas en tiempo de diseño son:
object Eventos: TIB_Events
AlertOnRegister = False
IB_Connection = DSTOMAW
Events.Strings = (
'Instalacion'
'IniciarCaja'
'PlantillaTTO'
'LoadCitas'
'Desbloquear_Reservas_Huecos'
'Tips')
OnEventAlert = EventosEventAlert
Left = 340
Top = 8
end

Nota: Existen 6 Eventos que pueden ser invocados desde el servidor, cada uno de ellos obviamente son para un uso específico. En el caso que nos atañe los dos que hacen refrescar la agenda son LoadCitas y Desbloquear_Reservas_Huecos.

En el evento FormShow del Formulario principal de las aplicaciones Clientes se ejecuta la siguiente sentencia:
DM.Eventos.RegisterEvents;
En el evento FormDestroy del Formulario principal de las aplicaciones Clientes se ejecuta la siguiente sentencia:
DM.Eventos.UnregisterEvents;
El evento EventAlert del componente TIB_Events tiene programado lo siguiente:
procedure TDM.EventosEventAlert(Sender: TObject; AEventName: String; AEventCount: Integer);
var
FRM : TForm;
begin
// Si hay que refrescar los cambios hechos en la Instalación/Configuración de la aplicación
if UpperCase(AEventName) = UpperCase('Instalacion') then
...
// Verificar si la Caja está iniciada o no
else if UpperCase(AEventName) = UpperCase('IniciarCaja') then
...
// Verificar si hay que refrescar la información de la Plantilla de TTO
else if UpperCase( AEventName ) = UpperCase( 'PlantillaTTO' ) then
...
// Verificar si hay que refrescar la Agenda
else if ( UpperCase(AEventName) = UpperCase('LoadCitas') ) or
( UpperCase(AEventName) = UpperCase('Desbloquear_Reservas_Huecos') ) then
begin
if FMDIChieldLoaded( 'FRMAgenda', FRM ) then
if FRM <> Nil then
TFRMAgenda( FRM ).AgendaEventAlert( AEventName );
end
// Verificar si hay que refrescar los Tips de la aplicación
else if ( UpperCase( AEventName ) = UpperCase( 'Tips' ) ) then
...
end;

Bueno hasta aquí todo el problema que tengo, que no es poco, porque ahora mismo los clientes deben estar cambiando de día cada vez que hacen alguna modificación para refrescar los datos y si los ha hecho otro usuario, no se les refresca la agenda y con ello el consiguiente engorro de tratar de citar en un hueco que ya ha sido ocupado por otra cita y que ellos no están viendo ese hueco ocupado, porque la agenda no se les refresca.

No me queda más que agredecer anticipadamente a quién pueda darme un empujón en la solución de mi problema.
Responder Con Cita
  #2  
Antiguo 21-10-2005
Aldo Aldo is offline
Miembro
 
Registrado: ene 2004
Posts: 46
Poder: 0
Aldo Va por buen camino
Soy yo mismo que he agregado algo nuevo a esta duda que creo explicará un poco más lo que me está pasando.

He hecho las pruebas desde un Servidor y un puesto Cliente y es cuando se me presentan todos los problemas antes mencionados. He estado haciendo pruebas de mejorar en algunos lugares algunas transacciones que tenía y el resultado es aún peor, porque después de esos cambios, cuando intento probarlo a traves de la red, no logro nunca que se ejecuten los Post_Events.

Lo más curioso es que he hecho las pruebas con un solo ordenador trabajando el como Servidor y como Cliente y no se me presenta ningún problema. OSEA que todo funciona como debeser y los POST_EVENTS funcionan

No sé si es un error de la red, de que pueda haber alguna diferencia entre los Firebird que corren en el servidor y en el cliente.

Espero vuestras respuestas. Un saludo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:33:52.


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
Copyright 1996-2007 Club Delphi