FoxPro/Visual FoxPro - Lucha con tablas

   
Vista:

Lucha con tablas

Publicado por alexcoinc (449 intervenciones) el 30/07/2009 16:50:16
Gracias por su atención : URGENTE

PRIMER TEMA:

Tengo una aplicación en la cual se trabajan con tablas libres en VFP 6.0
Ahora bien,

Cuando se deterioran los indices por X o Y motivos, poseo una utilidad en la cual lo que se realiza es:

1) Abrir una copia vacia de la tabla que tengo en una ubicacióon determinada (supongo que abre los indices CDX ??... espero respuesta de esta duda ??)

2) Le doy ZAP a esta copia vacia ... supongo que los indeices quedan vacios ... ?? espero respuesta de esta duda ??

3) Adiciono desde la tabla de producción hacia esta tabla que acabo de vaciar ... utilizo el Appe From

4) Finalmente Copio el DBF y el CDX a la ubicación de producción y reemplazo.

Fin.

Lo que busco es que esta tabla quede reparada con sus correspondientes indices y me deje trabajar normalmente.

HASTA AQUI: No sé si mi idea es concistente o no ?? ... necesito sus conceptos.

SEGUNDO TEMA Y FINAL:

De otro lado y en ocasiones me mandan la tabla con su respectivo CDX para que yo la mire y realice algo por debajo , pues donde los clientes no tienen el manejador de BAse de datos; lo que hago es:

Abrir la tabla, realizar los cambios pedidos, realizar un PACK y luego REINDEX.

Confiado: Mando tanto el DBF Y el CDX... y eso es todo. LO RARO es que me han llamado y me dicen que donde debe buscar (YA DENTRO DE LA APLICACION) no busca

(Pienso !!! se dañaria un indice, pero si lo acabo de REINDEXAR) Uhmm ??? que puede estar pasando... si sirve el REINDEX o como reconstruyo los indeices para que al mandar los dos archivos el DBF y el CDX sean confiables ??

Gracias por sus apreciaciones minuciosas !!

alexcoinc
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

RE:Lucha con tablas

Publicado por Hans (5 intervenciones) el 31/07/2009 00:29:50
Proba con fixfiles para visual foxpro, es una herramienta para reparar archivos dañados. De todas manera debes saber cual es la causa por la que se dañan los archivos, para dar una solución definitiva.
Atte.
Hans
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:Lucha con tablas

Publicado por alexcoinc (449 intervenciones) el 31/07/2009 14:36:39
No me satisface tu respuesta.

Gracias

Sigo a la espera de otros analisis de mi inquietud inicial.
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

Lucha con tablas

Publicado por Mauricio (1367 intervenciones) el 31/07/2009 15:08:31
Alex, este es un articulo encontrado en portal fox, espero te sea de utilidad:
*
*
El error que Visual Foxpro regresa cuando se corrompe el encabezado de una tabla y no podemos abrirla.

La siguiente rutina calcula el número de registros que contiene la tabla y los compara con el contenido del encabezado de la misma y de ser necesario, lo repara.

*-----------------
*- Reparar tabla -
*-----------------
FUNCTION _ReparaEncabezado(cTabla)

LOCAL nArea,nTamañoTabla,nRegistros,nTamañoencabezado,;
nTamañoRegistro,nRegistrosCalculados

nArea=FOPEN(cTabla,12)
nTamañoTabla=FSEEK(nArea,0,2)

nRegistros=_Lee(nArea, 4,4)
nTamañoEncabezado=_Lee(nArea, 8,2)
nTamañoRegistro=_Lee(nArea,10,2)

nRegistrosCalculados=FLOOR((nTamañoTabla-nTamañoEncabezado)/;
nTamañoRegistro)
IF nRegistrosCalculados#nRegistros
_Escribe(nArea,4,4,nRegistrosCalculados)
ENDIF

=FCLOSE(nArea)

ENDFUNC

*------------------
*- Lee encabezado -
*------------------
FUNCTION _Lee(nArea,nPosicion,nTamaño)

LOCAL cCadena,nValor,nSubInd

=FSEEK(nArea,nPosicion,0)
cCadena=FREAD(nArea, nTamaño)
nValor = 0
FOR nSubInd=0 TO nTamaño-1
nValor=nValor+ASC(SUBSTR(cCadena,nSubInd+1))*256^nSubInd
ENDFOR

RETURN INT(nValor)

ENDFUNC

*------------------------
*- Reescribe encabezado -
*------------------------
FUNCTION _Escribe(nArea,nPosicion,nTamaño,nNumero)

LOCAL cCadena,nSubInd

cCadena=''
FOR nSubInd=0 TO nTamaño-1
cCadena=cCadena+CHR(nNumero/256^nSubInd%256)
ENDFOR

=FSEEK(nArea, nPosicion,0)

RETURN FWRITE(nArea,cCadena)

ENDFUNC
Es recomendable que en las rutinas de mantenimiento de archivos se elimine primero el indice (CDX), se revise el encabezado con la rutina anterior y posteriormente se generen los indices de nuevo.
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