Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Refresco de DBGrid con post event (https://www.clubdelphi.com/foros/showthread.php?t=44965)

fedelphi 19-06-2007 15:28:40

Refresco de DBGrid con post event
 
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
Cita:

autoregister=true
database=basededatos
events='lote_actualizado'
nombre=IBEvents1
registered=false
tag=0
en el evento OnEventAlert
Código Delphi [-]
  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:
Código Delphi [-]
  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
Código Delphi [-]
  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
Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 17:28:29.

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