FoxPro/Visual FoxPro - Fichero dañado

 
Vista:

Fichero dañado

Publicado por Felix Matta (3 intervenciones) el 27/12/2010 16:18:16
Buenos Dias Amigos.

Gracias por leer estas lineas.

Como? se repara un fichero *.dbf dañado, con que?, teniendo en cuenta que no se puede abrir en el IDE del fox.

Creo que este fichero se ha dañado cuando de apago de forma imprevista la PC.

GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Fichero dañado

Publicado por Juan Manuel Cruz (512 intervenciones) el 27/12/2010 17:06:37
Intenta antes que nada con esto:

SET TABLEVALIDATE TO 0
SET EXCLUSIVE ON

USE c:\MiTabla.dbf

Appen Blank
delete
PACK

CLOS ALL

Esto es: desactivas la validación de tabla para que FOX no compruebe errores previos, y luego, abriéndola en forma exclusiva intentas agregar y eliminar un registro para forzar a VFP a mirar cabecera, desplazarse al final y luego el PACK debería dejarlo OK.

Recuerda siempre hacer copia previa , por si las moscas, de la tabla. ÇDBF, CDX, FPT, ya sabes, todos los archivos que la conformen.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Fichero dañado

Publicado por xx (378 intervenciones) el 27/12/2010 21:38:58
Bueno si no consigues repararlo lo unico que te resta es arreglarlo con algun editor
binario, te sugiero leas la documentación de la estructura de la cabecera de las
tablas esta en la ayuda del VFP o en la pagina de M$ generalmente lo que siempre
queda en estado incoherente Cuando insertas un registro es la cantidad de registros
que tiene la tabla y si es grande la tabla no la podras contar salvo que tengas una
vista bionica, pero podrias probar restarle uno al nro entero binario conformado por
los bytes 4-7 es decir te desplazas al byte 7 si el primer byte es el 0 u 8 si el
primer byte tu editor binario te lo muestra como 1, y lo reemplazas con otro que sea
uno menos es decir si el byte 7/8 tiene un valor de 255 lo reemplazas con 254.
Ahora si tu crees que en el momento del corte de luz tu estabas modificando la
estructura de la tabla te recomiendo compares los bytes iniciales con otra tabla con
la misma estructura que la tabla dañada lo unico que deben cambiar es la cantidad (4-7)
de registros y ultima fecha de actualizacion que son los byte (1-3).

http://msdn.microsoft.com/en-us/library/aa975386%28v=vs.71%29.aspx

Otra cosa que puedes hacer es leer tu tabla dañada con funciones de bajo nivel y
capturar registro por registro y copiarlo en otra tabla, las funciones son fopen()
fclose(), fgets() etc.

Tambien existen por ahi herramientas de recuperación, pero no he probado ninguna

Quizas sea tu indice el que esta dañado deberias probar eliminarlos y/o regenerarlos

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Fichero dañado

Publicado por Roberto (124 intervenciones) el 28/12/2010 13:37:51
Si no puedes con todo lo demas, prueba esto:

http://www.portalfox.com/index.php?name=Downloads&req=viewdownloaddetails&lid=201

Saludos,

Roberto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Fichero dañado

Publicado por Mauricio (1541 intervenciones) el 28/12/2010 14:37:55
Puedes intentarlo con esto:
*--- Programa para reparar tabla que da mensaje 'Not a Data File'
CLOSE TABLE ALL
WAIT WINDOW 'Si obtienes un Not a Database File, haz clic en Ignore' NOWAIT
USE articulo IN 0 EXCL && Reemplazar con el nombre de la tabla
WAIT WINDOW 'Esc para cancelar o cualquier tecla para continuar'
*---
Fh = FOPEN('articulo.dbf') && Reemplazar con el nombre de la tabla
=FSEEK(fh, 0,2) && Mueve el puntero al EOF
=FWRITE(fh, Space(123)) && Agrega un registro en blanco al final
=FCLOSE(fh) && Cierra la tabla
WAIT WINDOW 'Si puedes ver los datos, entonces se arreglo satisfactoriamente'
*USE articulo IN 0 EXCL
Go Bott
REINDEX
BROW
WAIT WIND 'Proceso finalizado....' time 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar