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 27-04-2007
Avatar de fedelphi
fedelphi fedelphi is offline
Miembro
 
Registrado: abr 2006
Ubicación: Santa Fe
Posts: 122
Poder: 19
fedelphi Va por buen camino
refresco de los datos

Hola a todos, tengo una duda sobre el refresco de los datos en una PC que se conecta remotamente al servidor firebird. Las terminales son todas con W98 y firebird esta sobre W XP, y utilizo Delphi 7, IBx para conectarme. El problema es que cuando ingreso datos en una terminal va todo bien en esta, pero en el servidor no veo esos cambios hasta que no finalizo la aplicacion en la terminal. Que debo realizar para que estos cambios se reflejen inmediatamente en el servidor?
Muchas gracias
Fede
__________________
De lo que hay no falta nada!!!
Responder Con Cita
  #2  
Antiguo 27-04-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 22
TJose Va por buen camino
hola fedelphi

Estoy casi seguro que el problema está en el manejo de las transacciones. No estas ejecutado el commit luego del (de los) insert/update/delete.
Por ese lado está la solución.

Saludos
TJose
Responder Con Cita
  #3  
Antiguo 03-05-2007
Avatar de fedelphi
fedelphi fedelphi is offline
Miembro
 
Registrado: abr 2006
Ubicación: Santa Fe
Posts: 122
Poder: 19
fedelphi Va por buen camino
De vuelta, he tratado de manejar las transacciones pero al hacer un
IBTransaction1.StartTransaction me sale el error "Transaction is active" y si no activo el IBTransaction1 al hacer el primer commit todo bien, pero luego me sale el error "Cannot perform this operation on a closed dataset". Es que cierra la tabla al hacer un commit? Creo que tengo un lio con esto de las transacciones.
Gracias
Fede
__________________
De lo que hay no falta nada!!!
Responder Con Cita
  #4  
Antiguo 03-05-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Yo tuve ese mismo problema y lo resolví (con ayuda del foro, claro) agregando otra transacción para insertar un registro.

Aún no encuentro el porque pero en mi programa el IBTransaction1 permanece activa y despues de realizar las consultas y procesos para grabar un registro no puedo usar el IBTransaction1, así que lo que hice (no se si es correcto, pero me funcionó) es agregra otro IBTransaction2 y con el realizar mi proceso de insert.

Aquí puedes ver el hilo que hago mención, espero te ayude.

Salud OS.


__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 05-05-2007
Avatar de fedelphi
fedelphi fedelphi is offline
Miembro
 
Registrado: abr 2006
Ubicación: Santa Fe
Posts: 122
Poder: 19
fedelphi Va por buen camino
Egostar creo que despues de investigar un poco con la informacion del hilo que diste en el mensaje anterior llegue a una solucion con los aportes de ronpablo, muchas gracias ronpablo. Esto es para que me corrijan por favor si estoy equivocado, ya que estoy aprendiendo, ya que son observaciones de practicar e investigar y la experiencia luego nos dara la razon si es que la tenemos. Bueno primero lo que pasaba es que al realizar el commit IBTransaction1.Commit, se desctiva la transaccion y todas las tablas por lo que sale el error "no se puede realizar la operacion en un dataset cerrado" entonces lo hice 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:=Tag; //en el tag del este form paso el id de la sucursal desde el form ppal
            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.Rollback;
              showmessage('Error al insertar en base de datos. '+e.Message);
            end;
          end;

entonces con el commit se cierra todo lo que dije anteriormente, pero con commitretaining no se cierran, siguen en el mismo estado en el que estaban cuando empieza la transaccion. Espero haber sido de ayuda, ah y me olvidaba, gracias a caral tambien por lo de la excepcion con el rollback, le agregue el mensaje para saber en caso de que se produzca algun error saber de que se trata. Saludos a todos y muchas gracias!!!!!
Fede
__________________
De lo que hay no falta nada!!!
Responder Con Cita
  #6  
Antiguo 05-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Los IBX no los he usado. Yo uso MDOLIB que son derivados de los IBX, tiene una propiedad DefaultAction que la tengo puesto a commit y la propiedad commitAfterpost a true. De esta forma me olvido de las transacciones (de momento).

Por otra parte, para que los cambios de una transacción se vean (en el caso de un commit), se debe hacer un commit, y después cerrar el dataset y volverlo a abrir ¿engorroso? sigue leyendo.

Para actualizar los datasets de forma automática, tienes los eventos y el EventAlert de IBX. En un trigger del servidor lanzas un mensaje después de insertar:
Código SQL [-]
  post_event 'Nuevo_Cliente';
En la ventana que quiera recibir ese mensaje, añades un componente IBEventAlert y registras el mensaje 'Nuevo_cliente'. El componente tiene un evento OnEvent y allí ordenas cerrar los datasets y volver a abrirlos.

El commitRetaining mantiene el contexto de la transacción que se inició; no se recomienda abusar de él.

PD: Para entender como funcionan, deberías leer los pdf acerca de las transacciones de Interbase, que son aplicables a Firebird.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
refresco de datos en red valdorre Conexión con bases de datos 8 05-05-2007 02:16:07
Refresco datos FireBird Io Conexión con bases de datos 2 06-08-2005 18:44:59
Refresco de Datos en Interbase PINO72 Firebird e Interbase 6 14-02-2005 18:21:30
Refresco de Datos con ADO Ivr Conexión con bases de datos 1 15-10-2004 14:11:07
Refresco de datos con ADO fjcg02 Conexión con bases de datos 2 23-01-2004 14:03:24


La franja horaria es GMT +2. Ahora son las 16:56:34.


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