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 29-09-2004
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Vaciar cache de las tablas/querys

Hola a todos,

Me encuentro ante un problema de perdida de datos, y se me ocurre que puede ser por cortes de energia o cuelgues.

Para vaciar la cache al disco, he puesto en el evento afterpost de cada tabla el correspondiente flushbuffers. Parece que esto funciona

Lo que no se es como vaciar la cache cuando hago un INSERT o UPDATE mediante una query???
Creo que el problema proviene de estos updates, y lo que me gustaria es que los cambios se grabaran a disco inmediatamente despues de ejecutar el sql

Una ayuda, por favoooooooorrrrrr

Voy a intentar aclarar un poco mas la pregunta, y exponer las pruebas que hago:

La base de datos es paradox.
Utilizo un TQuery con:
AutoRefresh:=false
CachedUpdates:=false;
RequestLive:=false;

Con ese Tquery hago un INSERT en el registro A y compruebo que los datos estan en la tabla.
Ahora mato el proceso (CTRL+ALT+SUP) y vuelvo a abrir el programa, y el registro A existe y tiene los datos que puse.

Hago otro INSERT en el registro B, y compruebo que tiene datos correctos.
Hasta ahora A yB estan en la tabla.
Provoco un corte de corriente (tiro del cable) y cuando reinicio reparo los "index corrupt" que aparecen.
Al arrancar el programa veo que ni A ni B estan en la tabla

Sigo probando, cambio el codigo y pongo query.applyupdates y me dice que no esta en modo de edicion/insercion.

Hago otro cambio, y cierro y abro la tabla a la que se refiere el Tquery justo despues de hacer la insercion.
Este cambio parece que funciona, porque desconecto el ordenador despues de grabar un nuevo registro C y cuando reinicio el registro C esta en la tabla.
De A y B jamas se volvio a saber.

Y aqui es donde ya no entiendo nada......
Que tiene que ver un Tquery con un Ttable, si uno lo utilizo para una cosa, y el otro para otra completamente distinta y en procedimientos separados ???

Ademas, si estan relacionados, en el afterpost del Ttable tengo un flushbuffers, que deberia descargar la cache a disco.

La solucion chapucera es cerrar y abrir la tabla, pero no me parece muy logica, seguro que hay otra cosa....


Y aun otra prueba mas:
Hago un INSERT sobre otra tabla (de la cual no tengo un Ttable), y provoco el apagon, y al reiniciar el registro añadido ESTA EN LA TABLA.

¿¿ Hay algun tipo de conflicto cuando hay un Tquery y un Ttable abierto ???

Gracias por tomarse el tiempo de leer hasta aqui.

Última edición por Sick boy fecha: 29-09-2004 a las 17:22:11.
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 16:45:53.


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