mis archivos pierden indice a cada rato, probe reindex pero sigue =

AprendizPeru
05 de Julio del 2005
Holas, mis archivos pierden indiice a cada rato, funciona solo cuando le doy reindex pero aun asi de unos dias pasa lo mismo que puedo hacer? ademas si hay alguna forma de averiguar si una tabla la puedo usar o no en modo exclusive esto para proceder a reindex, solo para saber si puedo o no usar en modo exclusive si no puedo usarlo que mepermita saltar a otra tabla sin darme error

sgomez
05 de Julio del 2005
Yo hice esto para arreglar automaticamente los indices (solo funciona para cdx pero se puede adaptar para idx)

tengo 3 prg que se llaman:

corrigecdx.prg (programa principal dentro del proyecto)
_screen.visible=.F.
do eliminacdx
do generacdx
_screen.visible=.T.
** fin de corrigecdx.prg

*eliminacdx.prg
on error do errores WITH ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( ),alltrim(datos.tabla)

use datos in 1
select datos
go top
do while !eof()
if file(fullpath("")+alltrim(datos.tabla)+".dbf")
use (datos.tabla) alias tabla in 2
if used("tabla")
use in tabla
endif
endif
select datos
skip
enddo
on error
clos data
return

procedure errores
PARAMETER merror, mess, mess1, mprog, mlineno,tablaconerror
do case
case merror=114
if file(tablaconerror+".cdx")
delete file (tablaconerror+".cdx")
endif
otherwise
* suspend
endcase
*** fin de eliminacdx.prg

**generacdx.prg
set date to DMY
set century on

clos all
tratoerror=.F.
local comando,expres
store "" to comando,expres

on error do errores WITH ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( ),alltrim(datos.tabla)

use datos in 1
select datos
go top
do while !eof()
select 1
if file(fullpath("")+alltrim(datos.tabla)+".dbf")
use (datos.tabla) alias tabla in 2
if !tratoerror
if !file(strtran(upper(dbf("tabla")),".DBF",".CDX"))
select 2
for a=1 to 9
expres=("datos.expresion"+padl(a,1,' '))
comando=&expres
if !empty(comando)
&comando
endif
next
endif
endif
if used("tabla")
use in tabla
endif
endif
select datos
skip
tratoerror=.F.
enddo
on error
clos data
return

procedure errores
PARAMETER merror, mess, mess1, mprog, mlineno,tablaconerror
*messagebox(padl(merror,3,' ')+"-"+mess)
do case
case merror=1707
use (tablaconerror) in 3
select 3
for a=1 to 9
expres=("datos.expresion"+padl(a,1,' '))
comando=&expres
if !empty(comando)
&comando
endif
next
tratoerror= .T.
otherwise
* suspend
endcase
** fin de generacdx.prg

La tabla datos.dbf tiene que tener esta estructura:
Campo Nombre de campo Tipo Ancho
1 TABLA Carácter 254
2 EXPRESION1 Carácter 254
3 EXPRESION2 Carácter 254
4 EXPRESION3 Carácter 254
5 EXPRESION4 Carácter 254
6 EXPRESION5 Carácter 254
7 EXPRESION6 Carácter 254
8 EXPRESION7 Carácter 254
9 EXPRESION8 Carácter 254
10 EXPRESION9 Carácter 254

En el campo "tabla" vá el nombre de la tabla que tiene indice cdx y en expresion1,expresion2, etc van cada una de las expresiones de indice (puede regenerar hasta 9 entradas de indice en un indice cdx) tal como lo ejecutariamos en la linea de comandos, por ejemplo en el campo expresion1 podria ir: index on codigo tag CODIGO

Cesarz
05 de Julio del 2005
Si estas Usando Versiones hasta 7.0 puedes usar el on error para capturar el error. y/o utilizar el flock(), si usas vfp 8.0 o 9.0 consulta acerca de try catch. ahi te envio un link
http://www.fpress.com/revista/num0604/art.htm
Salu2 Paisa desde Tacna