PDA

Ver la Versión Completa : Corrupción de Tablas


TDworD
28-09-2004, 13:40:46
Saludos a todos,

Creo que tengo un problema ya conocido por todos, una aplicación Delphi que accede a unas tablas paradox. Con el tiempo estas tablas se corrompen, fallan los índices y las cabeceras de las tablas, etc...

He estado buscando documentación al respecto y he encontrado utilidades para corregirlo, pero el problema se esta volviendo demasiado habitual y no puedo ir cada dos por tres a solucionarlo. También he leido de un código fuente que permite reconstruir tanto la tabla como los índices si se detecta ese error, pero no lo he encontrado.

En algunos sitios he leido que podría ser un problema de configuración, pero no he visto nada que indique que parámetro tengo mal configurado.

Me gustaría terminar con este problema de una manera definitiva para que no volviera a ocurrir, tanto para este proyecto como para futuros proyectos que tengo que realizar ¿podeis ayudarme?.

He visto un truco de hacer un pack de las tablas que parece reconstruirlas, no se si con eso se podría solucionar el problema, ya que las tablas que manejo no son muy grandes (menos de 5000 registros) ¿sería viable hacer un pack de las tablas al iniciar la aplicación? ¿reconstruiría el pack la cabecera de la tabla y los índices solucionando el problema?

Un saludo y gracias.

jgutti
28-09-2004, 14:55:32
TDworD
Existe una utilidad de nombre SysUtils que se encuentra en la red y permite recuperar los archivos corruptos.
Si no lo encuentras te lo puedo enviar por e-mail

atte

jgutti

jgutti
28-09-2004, 15:00:48
si el error de los index es este "Index out of date" y utilizas servidor con windows nt,2000,2003.

La solución esta en una página de borland, que explica que hay que desactivar los bloqueos oportunistas de windows NT. Tienes que añadir en el registro de windows lo siguiente:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters

Una clave de Tipo DWORD que se llame EnableOpLocks con el valor 0.

(Información Técnica número 3342 de Borland.)

atte
jgutti

TDworD
28-09-2004, 15:12:22
Muchas gracias jgutti, pero por desgracia en esta ocasión el error es por corrupción de datos.

He encontrado el siguiente enlace:

http://www.softwarementors.com/arti/rep_pdx/reppdxnf.htm

en el se explica detalladamente como usar una unidad llamada TUtility para arreglar tablas paradox. Parece ser que no hay una buena solución para el problema, pero al menos con esta unidad y algo de programación se puede reconstruir la tabla. Probaré a ver.

Muchas gracias por la ayuda.

Un saludo.

jgutti
28-09-2004, 15:39:38
La utilidad que te comentaba (sysutils) es para recuperar tablas corruptas no importando el error

- lo del registro es para el mensaje Index out of date.

Pablo Carlos
28-09-2004, 16:13:27
Hola... tengo un prg que baje del club que corrige los índices... puedes buscarlos en el club y ver el código y adaptarlo a tu prg para que al iniciar te verifique los índices y si están corruptos que los arregle sin preguntar... además de agradecer al autor :D

Saludos

TDworD
29-09-2004, 17:29:38
Muchas gracias a todos por vuestra ayuda, ya me he bajado la aplicación SysUtils que ha corregido la corrupción de datos, por desgracia la aplicación esta en un cliente, y no puedo comentarle que cada vez que haya un error debe entrar en la aplicación para solucionarlo, y tampoco puedo ir yo cada vez.

Por desgracia necesito una solución que me "garantice" con cierta seguridad que esto no vuelva a suceder. Por desgracia, por lo que he visto la única manera es modificar la programación para detectar la corrupción y reconstruir las tablas en ese caso. Este proceso no me da demasiada confianza. Finalmente creo que me voy a decantar por cambiar la base de datos del programa, creo que la pasaré a MySQL, por fortuna la aplicación esta lo bastante bien estructurada y es lo suficientemente pequeña como para realizar ese cambio sin sufrir muchos problemas.

Un saludo y gracias por vuestra colaboración. Hacía mucho tiempo que no entraba en el foro y es un placer ver como sigue habiendo gente tan colaboradora.

TDworD