Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2008
Avatar de geolife
[geolife] geolife is offline
Miembro Premium
 
Registrado: nov 2006
Ubicación: Barcelona
Posts: 88
Poder: 18
geolife Va por buen camino
Problemas con Table.FlushBuffers

Hola amigos ,

Tengo una antigua aplicación realizada en Paradox que funciona locamente y hace poco me he visto obligado a su actualización, para la empresa donde funciona (ya se que no es la mejor base de datos...)

Una de las cosas que he querido hacer, ha sido añadir después del evento AfterPost de una "TablaClientes", el procedimiento FlushBuffers para forzar la actualización de datos en disco y evitar problemas de perdida de información por cuelgues eléctricos, caidas de red, etc.

El caso es que no funciona de ninguna forma, también he probado DbisaveChanges (TablaClientes.Handle) pero nada de nada. El archivo en disco de la tabla no sufre ningún cambio, excepto hasta el momento de cerrar la aplicación, donde entonces, si se vuelcan todos los cambios realizados.

Este el código que he probado, tanto con DBiSavesChanges com sin el:

procedure TDm_Datos.TablaClientesAfterPost(DataSet: TDataSet);
begin
TablaClientes.FlushBuffers;
Dbisavechanges (TablaClientes.Handle);
TablaClientes.Refresh;
end;

¿No tengo ni idea a que puede deberse?!!,

Gracias por vuestro tiempo.

Silvestre.

Última edición por geolife fecha: 14-01-2008 a las 20:39:02.
Responder Con Cita
  #2  
Antiguo 14-01-2008
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Lo único que necesitas es:
Código Delphi [-]
Tabla.FlushBuffers;

Lo que pienso que está ocurriendo es que tienes abierta la tabla o una consulta desde otro equipo y en ese equipo no ves el cambio hasta que cierrar y abres de nuevo la tabla.

Solución, entre otras, pon un Timer y dispara un refresco de la tabla o la consulta cada x tiempo, ojo en el equipo que está viendo los datos no en el que los está cambiando.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 15-01-2008
Avatar de geolife
[geolife] geolife is offline
Miembro Premium
 
Registrado: nov 2006
Ubicación: Barcelona
Posts: 88
Poder: 18
geolife Va por buen camino
Marcos , muchas gracias por tu ayuda !.

He probado nuevamente, pero sigue sin funcionar, hay algo que se me escapa...Para el caso, he realizado una sencilla aplicación con una tabla paradox de contactos, unicamente de acceso local, donde se ve visualmente el estado del archivo en todo momento.

Yo pensaba que al lanzar el procedimiento FlushBuffers después de un afterpost,(no se si estoy equivocado), esta recibía las actualizaciones que estuvieran pendientes, con lo cual el archivo físico de la tabla es modificado.

Código Delphi [-]
procedure TForm1.TablaContactosAfterPost(DataSet: TDataSet);
begin
TablaContactos.FlushBuffers;
end;

Dejo un enlace a un programa que realiza esta acción sobre una tabla de contactos, con un Timer que observa constantemente el archivo de la tabla para ver si ha sido modificada, lo único que he comprobado, es que el archivo de la tabla, solo recibe los cambios cuando finaliza la aplicación o bien cuando cerramos/abrimos la Tabla en cuestión.

He intentado subir el programa de ejemplo a la zona FTP de Clubdelphi, pero me ha sido imposible. Asi que dejo otro link aquí, por si alguien desea descargar el ejemplo, viene con el código fuente y el ejecutable, no necesita instalación.

http://www.fengshuinatural.com/files/FlushBuffers.zip

Gracias por vuestro tiempo.

Silvestre.

Última edición por geolife fecha: 20-02-2008 a las 20:47:14.
Responder Con Cita
  #4  
Antiguo 15-01-2008
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues funciona de la manera que te he explicado.
1.- Quien graba los datos es el que manda el Flushbuffers;
2.-Quien tiene una consulta o tabla abierta no verá los cambios hasta que haga un refresh.

Para eso te digo lo del Timer.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 15-01-2008
Avatar de geolife
[geolife] geolife is offline
Miembro Premium
 
Registrado: nov 2006
Ubicación: Barcelona
Posts: 88
Poder: 18
geolife Va por buen camino
Hola Marcos,

Llevas razón en todo el asunto, funciona perfectamente.

El problema ha sido mio, solo me habia fijado en el dato del registro de fecha que windows gestiona, el cual no aparece inmediatamente actualizado después de la operación. Me he visto obligado, a salvar cambios con Flushbuffer desconectando 1 segundo mas tarde el ordenador de la red electrica, y efectivamente quedan a salvo, sin embargo, sin utilizar FlushBuffer, los cambios no se registran y si pierde todo el trabajo.

Gracias!

Silvestre.
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
ayuda con ApplyUpdates ó FlushBuffers y paradox JefeNet Conexión con bases de datos 7 10-09-2007 19:25:47
Flushbuffers en ADO eLYaN Conexión con bases de datos 1 14-07-2006 12:38:59
Usar FlushBuffers??? CarmaZone Tablas planas 2 19-07-2005 23:33:54
Problemas con table VolaRe Conexión con bases de datos 5 18-04-2004 14:09:12
alter table / modify -> Problemas en tablas dbase Jose_Pérez SQL 6 17-11-2003 09:24:34


La franja horaria es GMT +2. Ahora son las 20:45:42.


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