*-------------------------------------------------------------------------------------------- *
* PROGRAMA : DBREPARA.PRG
* OBJETIVO : RECORRE TODOS LOS DBF DE UN DIRECTORIO Y CHEQUEA QUE SE PUEDA
* ABRIR SI NO ES ASI, INTENTA REPARAR EL ENCABEZADO
* AUTOR : RICHARD SANCHEZ
* FECHA : 11/OCT/2004
*-------------------------------------------------------------------------------------------- *
CLOSE ALL
ON ERROR DO NOABRE
SET EXCLU ON
do db_titulo
SELE 1
MRUTA = DB_DRIVE+DB_ARCHIVO+DB_SLASH
SET DEFA TO &MRUTA
DECLARE ARD(200,5)
XTA=0
KA=ADIR(ARD,"*.DBF")
T=ASORT(ARD)
TKA=0
FOR N=1 TO KA
WAIT WINDOWS "REPARANDO TABLAS" NOWAIT
DBF=ALLTRIM(ARD(N,1))
AP=.T.
DO WHILE .T.
OK=.T.
USE &DBF
IF OK
EXIT
ENDIF
ENDDO
IF .NOT. AP
SELE 1
TKA=TKA+1
ENDIF
NEXT
CLOSE ALL
ON ERROR
CLOSE ALL
SET DEFA TO &DB_OBJETOS
IF TKA<>0
DO DB_ERRMSG WITH "Proceso finalizado ! Se repararon "+ALLTRIM(TRANS(TKA,"999999"))+" archivo(s)"
ELSE
DO DB_ERRMSG WITH "Proceso finalizado ! No se encontraron archivos da¤ados"
ENDIF
QUIT
PROCEDURE NOABRE
H=FOPEN(DBF,2)
IF H<0
DO DB_ERRMSG WITH "NO ES POSIBLE ABRIR EL ARCHIVO "+DBF
RETURN
ENDIF
M=FSEEK(H,4)
C1=FREAD(H,1)
M=FSEEK(H,5)
C2=FREAD(H,1)
M=FSEEK(H,6)
C3=FREAD(H,1)
TAM=(ASC(C3)*65536)+(ASC(C2)*256)+(ASC(C1))
OTM=TAM
TAM=TAM-1
STORE 0 TO B1,B2,B3
IF TAM>=65536
B3=INT(TAM/65536)
ENDIF
TAM=TAM-(65536*B3)
IF TAM>=256
B2=INT(TAM/256)
ENDIF
TAM=TAM-(256*B2)
B1=TAM
M=FSEEK(H,4)
T=FWRITE(H,CHR(B1))
M=FSEEK(H,5)
T=FWRITE(H,CHR(B2))
M=FSEEK(H,6)
T=FWRITE(H,CHR(B3))
XTA=(B3*65536)+(B2*256)+B1
IF AP
SELE 1
AP=.F.
ENDIF
DO DB_CLRLIN WITH 23
@ 23,15 SAY "TABLA "+DBF+TRANS(OTM,"999999")+" REGISTROS REPARANDOSE"
T=FCLOSE(H)
OK=.F.
Comentarios sobre la versión: Versión 1 (3)