Error 2091 "Tabla Corrupta!!"

03/10/2005 - 16:05 por neoLeoX | Informe spam
Hola Grupo

Tengo una aplicacion que ha venido trabajando bien por 2 años...

Hace una semana un modulo lo modifique para que trabajara con CursorAdapters
ODBC a las mismas bases de datos. Tres dias de pruebas y todo bien...

Cuando implanto en maquina de un cliente (Bar-Restaurant) trabajo sin
problemas por horas pero para eso de la 11pm aparece un error en pantalla

Table 'C:\miPath\miTabla.dbf' has become corrupted. The table will need to
be repaired before using again. (Error 2091)

nunca me habia topado con este problema... por lo que no estaba preparado
para solucionarlo...

Lei la definicion del error en el MSDN...

1) Tiene que ver con que se accese la misma base de datos de forma Nativa y
con ODBC simultaneamente?
2) como se corrige esa tabla ?


Gracias de antemano
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-L.Ortega
El Paso Texas
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 

Leer las respuestas

#1 jc_pita
03/10/2005 - 20:12 | Informe spam
Hola Leo:

Este error da pocas veces, pero ocurre. Te envío una función escrita en
VFP que corrige este error.

Puedes llamarla, por ejemplo, RepairHeader, y pasarle como parámetro el
nombre de la tabla a reparar, como te pongo a continuación:

RepairHeader("C:\TABLES\NOMEN.DBF")

Es muy efectiva, la he utilizado muchas veces y nunca me ha fallado.

Saludos, y espero que te resuelva el problema.


Pita.

*******************************************************
A continuación la función, que llama a su vez a dos funciones
subordinadas, ReadBytes y WriteBytes, que también te codifico.


Lparameters tcDBF
Local handle, lnFileSize, lnReccount, lnHeaderSize, lnRecordSize, ;
lnCalculatedReccount, llHasMemo
handle=fopen(tcDBF,12) && Opened readwrite
lnFileSize = fseek(handle,0,2) && Get file size
* Read header info
lnReccount = ThisForm.ReadBytes(handle, 4,4)
lnHeaderSize = ThisForm.ReadBytes(handle, 8,2)
lnRecordSize = ThisForm.ReadBytes(handle,10,2)

lnCalculatedReccount = floor((lnFileSize-lnHeaderSize)/lnRecordSize)
If lnCalculatedReccount # lnReccount && If calculated # recorded fix it
ThisForm.WriteBytes(handle, 4,4,lnCalculatedReccount)
Endif
=fclose(handle)

Lparameters tnHandle, tnPos, tnSize, tlLR
Local lcString, lnRetValue,ix
=fseek(tnHandle, tnPos,0) && Go to Pos
lcString = fread(tnHandle, tnSize) && Read tnSize bytes
lnRetValue = 0
For ix=0 to tnSize-1 && Convert to a number
lnRetValue = lnRetValue + asc(substr(lcString,ix+1)) * ;
iif(tlLR,256^(tnSize-1-ix),256^ix)
Endfor
Return int(lnRetValue)

Lparameters tnHandle, tnPos, tnSize, tnNumber, tlLR
Local lcString, lnLowDword, lnHighDword,ix
lcString=''
If tlLR
For ix=tnSize-1 to 0 step -1
lcString=lcString+chr(tnNumber/256^ix%256)
Endfor
Else
For ix=0 to tnSize-1
lcString=lcString+chr(tnNumber/256^ix%256)
Endfor
Endif
=fseek(tnHandle, tnPos,0) && Go to Pos
Return fwrite(tnHandle,lcString)

Preguntas similares