PDA

Ver la Versión Completa : Refresco de DBGrid con post event


fedelphi
19-06-2007, 15:28:40
Hola foro, me surgio un problema que no le encuentro la vuelta. Estoy haciendo una aplicacion que funciona en red y se deben actualizar todas las PC que estan trabajando con la aplicacion. Estoy trabajando con firebird, delphi 7 y me conecto con los IB. Para lograrlo en el modulo de datos coloque un TIBEvents con las propiedades
autoregister=true
database=basededatos
events='lote_actualizado'
nombre=IBEvents1
registered=false
tag=0
en el evento OnEventAlert
if eventname='lote_actualizado' then
begin
showmessage('actualización');
ibtacumuladoxlote.Refresh;//tabla a visualizar en el dbgrid
end;
Lo que me sucede es que se actualiza solo la pc donde se realiza la operacion pero no en las demas, pero al mensaje lo muestra en todas las pc.
Tambien he probado colocar el TIBEvents en la forms donde esta el dbgrid pero ni siquiera muestra el mensaje.
Muchas Gracias

jhonny
19-06-2007, 15:37:28
¿Haz colocado un BreakPoint para ver si realmente no esta pasando por el ibtacumuladoxlote.Refresh;? pues si te muestra el mensaje también debería pasar por esa linea... cerrando y abriendo la tabla asi:

if eventname='lote_actualizado' then
begin
showmessage('actualización');
ibtacumuladoxlote.Close;//tabla a visualizar en el dbgrid
ibtacumuladoxlote.Open;
end;

fedelphi
19-06-2007, 22:37:35
Gracias jhonny, lo hice tambien de esa forma y nada, el codigo que incorpore fue if eventname='lote_actualizado' then
begin
showmessage('actuliza acumuladoxlote');
ibtacumuladoxlote.Close;//tabla a visualizar en el dbgrid
showmessage('ya realizó acumuladoxlote.close');
ibtacumuladoxlote.Open;
showmessage('ya realizó acumuladoxlote.open');
//ibtacumuladoxlote.Refresh;
end;
a los mensajes los muestra, el dbgrid queda en blanco, luego muestra otra vez los datos, pero sin actualizar, en cambio si lo actualiza en la pc desde donde se ingresan los datos.
Me parece que puede ser el modo en que actualizo los datos, a ver si sirve esto que hice o esta mal, a la tabla la actualizao con un trigger before insert, al ir introduciendo registros voy sumandole 1 al que corresponda en IBTAcumuladoxlote y a la tabla que dispara el trigger le escribo los datos asi
try
if not modulodatos.IBTransaction1.Active then
modulodatos.IBTransaction1.StartTransaction;
if not Modulodatos.IBTAlmacen.Active then
Modulodatos.IBTAlmacen.Active:=True;
modulodatos.IBTAlmacen.Append;
modulodatos.IBTAlmacen.FieldByName('ID_ALMACEN').AsInteger:=1;
modulodatos.IBTAlmacen.FieldByName('NRO_TICKET').AsString:=ECodigo.Text;
modulodatos.IBTAlmacen.FieldByName('ID_SUCURSAL').AsInteger:=sucursal_nro; //sucursal_nro es una variable global definida en ppal para pasar el numero de sucursal entre forms
modulodatos.IBTAlmacen.FieldByName('ID_TICKET').AsInteger:=id_ticket;
modulodatos.IBTAlmacen.FieldByName('FECHA_PRESENTACION').AsDateTime:=Date;
modulodatos.IBTAlmacen.FieldByName('MONTO').AsFloat:=Monto;
modulodatos.IBTAlmacen.FieldByName('FECHA_INGRESO').AsDateTime:=Date;
modulodatos.IBTAlmacen.FieldByName('NRO_CAJA').AsInteger:=RGCajas.ItemIndex+1;
modulodatos.IBTAlmacen.Post;
modulodatos.IBTransaction1.CommitRetaining;

except
on E:Exception do
begin
modulodatos.IBTransaction1.RollbackRetaining;
showmessage('Error al insertar en base de datos. '+e.Message);
end;
end;
puede ser algun problema en como guardo los datos? Gracias!!

jhonny
20-06-2007, 15:47:37
Prueba quitando el llamado al evento "lote_actualizado" del "Trigger Before Insert" y colocalo en el "Trigger After Insert" y nos cuentas que sucede.

fedelphi
07-11-2007, 13:51:37
Disculpen por la tardanza de esta respuesta pero retome este proyecto nuevamente hace un par de semanas y encontre solucion a este problema colocando la propiedad read_committed en el params del IBtransaction.
Muchas gracias jhonny!!!
Fede