Reindexar Archivos DBF de Visual Fox 6.0
Publicado por Gabrielk (26 intervenciones) el 31/03/2006 00:51:52
con que software puede generar el indice CDX ,no tengo el fuente, ni visual fox..Que me recomiendan hacer
Valora esta pregunta


0
*****************************************************************
DEFINE CLASS IndexManager AS SESSION
******************************************************************
*==============================================================
FUNCTION Reindexa(tcTablesPath AS STRING) AS VOID
* regenera los índices de las tablas
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LOCAL laInfo[1],;
laTagInfo[1],;
lnFiles,;
lnCounter,;
lnTagCount,;
lnTag,;
lcTable,;
lcAlias,;
lcIndexExpr,;
lcOrden,;
lOk
TRY
lOk = .T.
*** levanta info de las tablas
lnFiles = ADIR(laInfo,ADDBS(tcTablesPath) + '*.dbf')
IF EMPTY(lnFiles)
RETURN .F.
ENDIF
*** regenera
FOR lnCounter = 1 TO lnFiles
lcAlias = JUSTSTEM(laInfo[lnCounter,1])
lcTabla = ADDBS(tcTablesPath)+ laInfo[lnCounter,1]
lcDbf = ADDBS(tcTablesPath) + lcAlias
WAIT WINDOW "Procesando " + lcAlias NOWAIT
USE (lcTabla) IN 0 ALIAS (lcAlias) EXCLUSIVE
SELECT (lcAlias)
*** info sobre los índices
lnTagCount = ATAGINFO(laTagInfo)
*!* 1 Index tag name in a .cdx file
*!* 2 Index tag type
*!* 3 Index key expression
*!* 4 Filter expression
*!* 5 Index order as created (Ascending or Descending)
*!* 6 Collate sequence
IF !EMPTY(lnTagCount)
*** elimina los índices existentes
DELETE TAG ALL
FOR lnTag = 1 TO lnTagCount
cNomIndice = laTagInfo(lnTag,1)
cExpresion = laTagInfo(lnTag,3)
lcTipo = laTagInfo(lnTag,2)
lcOrden = laTagInfo(lnTag,5)
lPrimario = .F.
lCandidato = .F.
IF VERSION(3) = "34"
*--- Español
DO CASE
CASE lcTipo = "PRINCIPAL"
lPrimario = .T.
CASE lcTipo = "CANDIDATO"
lCandidato = .T.
OTHERWISE
lPrimario = .F.
lCandidato = .F.
ENDCASE
IF lcOrden = "ASCENDENTE"
lDescending = .F.
ELSE
lDescending = .T.
ENDIF
ELSE
*--- suponemos que es la versión en Inglés
DO CASE
CASE lcTipo = "PRIMARY"
lPrimario = .T.
CASE lcTipo = "CANDIDATE"
lCandidato = .T.
OTHERWISE
lPrimario = .F.
lCandidato = .F.
ENDCASE
IF lcOrden = "ASCENDING"
lDescending = .F.
ELSE
lDescending = .T.
ENDIF
ENDIF
cFiltro = laTagInfo(lnTag,4)
DO CASE
CASE lPrimario
cIndex = "alter table " + lcDbf + " add primary key " + ALLTRIM(cExpresion) ;
+ IIF(!EMPTY(cFiltro)," for "+ALLTRIM(cFiltro),"") + " tag " + ALLTRIM(cNomIndice)
&cIndex
CASE lCandidato
cIndex = "index on " + ALLTRIM(cExpresion) + " tag " + ALLTRIM(cNomIndice) ;
+ IIF(!EMPTY(cFiltro)," for "+ALLTRIM(cFiltro),"") + " candidate"
&cIndex
OTHERWISE
cIndex = "index on " + ALLTRIM(cExpresion) + " tag " + ALLTRIM(cNomIndice) + ;
IIF(!EMPTY(cFiltro)," for "+ALLTRIM(cFiltro),"") + IIF(lDescending," descending","")
&cIndex
ENDCASE
ENDFOR
ENDIF
USE IN (lcAlias)
ENDFOR
CATCH TO oErr
* SUSPEND
lOk = .F.
cMensaje = "Error Nº : " + STR(oErr.ErrorNo) + CHR(13) +;
"Línea : " + STR(oErr.LINENO) + CHR(13) +;
"Mensaje : " + oErr.MESSAGE + CHR(13) +;
"Procedimiento : " + oErr.PROCEDURE + CHR(13) +;
"Detalles : " + oErr.Details + CHR(13) +;
"Instrucciones : " + oErr.LineContents
MESSAGEBOX(cMensaje, 64, "Error en Datos ")
FINALLY
IF lOk
MESSAGEBOX("La reindexación de archivos ha finalizado con éxito", 64, "¡Atención!")
ELSE
MESSAGEBOX("Ha ocurrido algún problema en el proceso de reindexación", 64, "¡Atención")
ENDIF
ENDTRY
ENDFUNC
*==============================================================
ENDDEFINE
******************************************************************