PDA

Ver la Versión Completa : Vaciar cache de las tablas/querys


Sick boy
29-09-2004, 14:40:53
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 :confused:

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.