Pregunta: | 1439 - ELIMINACION DE REGISTROS POR SQL |
Autor: | Jorge Cortés |
Tengo unas tablas Paradox locales, una vez que estas tablas tienen informacion y procedo a borrarle algunos registros por medio de un TQuery con un DELETE de SQL: QryDepurador.RequestLive:=True; QryDepurador.Close QryDepurador.SQL.Clear; QryDepurador.SQL.Add(´DELETE FROM historial´); QryDepurador.SQL.Add(´WHERE bitacora=1´) QryDepurador.ExecSQL; Efectivamente los registros son borrados pero el tama&o de la tabla no decrementa en absoluto, esto es: si el tama&o consta de 56K y una vez borrados estos registros, la tabla queda con 56K. Esto lo hace cuando la tabla esta indexada y no lo esta, ambos casos dan el mismo resultado. A que se puede deber, esto ? De hecho realize una prueba haciendo un ciclo: QryDepurador.Close QryDepurador.SQL.Clear; QryDepurador.SQL.Add(´SELECT * FROM historial´); QryDepurador.SQL.Add(´WHERE bitacora=1´) QryDepurador.Open; While not QryDepurador.Eof do QryDepurador.Delete; Pero igual la tabla original queda inflada ! * Igual le coloque el "Pack Table" al momento de estructurarla pero igual. De antemano Gracias. |
Respuesta: | Diego Jose Muñoz Carbajo |
En dBase los registros borrados solamente se marcan como borrados, no se elimina espacio en disco En Paradox, los registros borrados se pierden, pero no se recupera el espacio en disco. Para recuperarlo, con el Database Desktop, utiliza la opcion ´Reestructure table´ y marca ´Pack table´, asi funciona. Este proceso debe realizarse por tanto de vez en cuando. Para hacerlo desde codigo, hay que llamar al Api del bde, concretamente a DbiDoReestructure pero este tema ya es mas complicado (busca informacion sobre el api del bde y como utilizar DbiDoReestructure, es sencillo) |