FoxPro/Visual FoxPro - Reindexar Archivos DBF de Visual Fox 6.0

 
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Reindexar Archivos DBF de Visual Fox 6.0

Publicado por Ernesto Hernandez (4623 intervenciones) el 31/03/2006 05:34:23
Al menos necesitas la consola de VFP.

Te recomiendo que chekes en www.foxite.com Simon Arnold acaba de realizar una actualizacion de su consola Ver. 3.0 y es de la version 8 la cual vas a necesitar para ejecutar la siguiente rutina .y con eso tendras tus indices de nuevo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
*****************************************************************
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
******************************************************************


** Ejemplo de su uso
oIndex = NEWOBJECT("IndexManager","indexa.prg")
oIndex.reindexa("c:\misistema\tablas")

Lo mejor para ti y suerte compañero
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:Reindexar Archivos DBF de Visual Fox 6.0

Publicado por Incognito (45 intervenciones) el 01/04/2006 18:06:33
...EL MISMO PROBLEMA DE SIEMPRE EN TODAS LAS VERSIONES -VFP- !...

Incognito -La Solucion Efectiva del Futuro -Inmediato-
R.D.
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:Reindexar Archivos DBF de Visual Fox 6.0

Publicado por saul (362 intervenciones) el 01/04/2006 19:44:57
Hola

en Primer lugar se ve que Incognito ni sabe de lo que estas hablando

Sabes ya te conteste en otros foros pero te cotesto por aca

Lo que necesitas es hacer abrir tu tabla ver los indices que alli hay y luego
darle INDEX ON <tucampo> TAG <tuIndice> ADDITIVE

es asi de facil

pd..

Ya sabemos a que se dedica Incognito y nada que ver con la progra.

jajajajaaa

Lastima me da resentido Social..

Saul Hernandez
Guatemala
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:Reindexar Archivos DBF de Visual Fox 6.0

Publicado por COMO VEO LO INDICES (1 intervención) el 21/02/2009 03:37:10
como velo los indices que hay en las tablas
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:Reindexar Archivos DBF de Visual Fox 6.0

Publicado por Alicia (1 intervención) el 29/11/2012 14:14:27
Justo es lo que andaba buscandooo graciasss Saul!!! *-*
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