4 de octubre de 2017

Regenerar Indices de las Tablas de un DBC

Quizás no sea la gran cosa, pero, a todos nos pasa que tenemos que regenerar indices, y reindexar nuestras tablas... etc etc etc.

En la empresa donde trabajo usamos este proceso cuando las sucursales reciben los DBF en las transferencias de datos, entonces los CDX están en las sucursales y solo enviamos los DBF (en un archivo comprimido, gracias a PortalFox).

Necesitamos abrir los DBF en forma exclusiva. Y este código solo tiene en cuenta indice primarios y regulares, se puede retocar para quienes necesiten.

Bueno, vamos al código... 'databaseconteiner.DBC' es el nombre del Contenedor de las Tablas...

SELECT * FROM databaseconteiner.DBC ;
  WHERE OBJECTTYPE = 'Table' ;
  INTO CURSOR TABLAS
*
SELECT TABLAS
SCAN
  TABLA1 = TABLAS.OBJECTNAME
  USE &TABLA1 IN 0 EXCLUSIVE
  SELECT &TABLA1
  WAIT WINDOWS 'Tabla ' + ALLTRIM(TABLA1) + ' (' + TRANSFORM(RECNO('TABLAS')) + ;
    '/' + TRANSFORM(RECCOUNT('TABLAS')) + ')' NOWAIT
  FOR I=1 TO TAGCOUNT()
    IF !EMPTY(TAG(I))
      INDICE = SYS(14,I)
      NOMBRE = TAG(I)
      PRINCI = PRIMARY(I)
      IF PRINCI
        ALTER TABLE &TABLA1 DROP PRIMARY KEY
        ALTER TABLE &TABLA1 ADD PRIMARY KEY &INDICE TAG &NOMBRE
      ELSE
        INDEX ON &INDICE TAG &NOMBRE ADDITIVE
      ENDIF
    ELSE
      REINDEX
      EXIT
    ENDIF
    REINDEX
  ENDFOR
  PACK
ENDSCAN

Guillermo Gastón Giménez

1 comentario :

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.