mis archivos pierden indice a cada rato, probe reindex pero sigue =
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
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
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
