La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1864 - SE ME ALENTA MI SISTEMA EN RED USANDO SET FILTER
Autor:  Alexis Herrera Peralta
Tengo un sistema trabando en red hecho en clipper5.2 y todas mis bases de datos las muestro filtradas "SET FILTER TO", pero el detalle es que se hace muy lenta las consultas y la apertura de las mismas en las terminales, me recomendaron quitar los set filters pero de que otra manera las filtreo, ya que los filtros es mi base para mostrarle los datos al usuario.
Gracias de antemano

  Respuesta:  Daniel Portunato
La forma más sencilla de reemplazar los filtros es con índices condicionales.

Reemplazar la sentencia:
SET FILTER TO Condicion_Filtro

por:
INDEX ON Nombre_Tabla->Campo_Ordenamiento TO Nombre_Indice FOR Condicion_Filtro

Este método no será mucho más rápido, pero una vez generado el índice, el GOTOP, SKIP y GOBOTTOM responderán instantáneamente, y no se perderá el cursor vaya a saber dónde.

Atención: Como estás en una red, deberás generar un nombre de índice único por puesto de trabajo.

Se podría usar una variable de entorno de la siguiente forma:

En un .BAT de inicio poner en cada terminal:

SET PUESTO=xxx

xxx diferente en cada estación.

En el programa recuperar el puesto:

cNomTer := GETENV ( "PUESTO" )
IF EMPTY ( cNomTer )
cNomTer := "00"
ENDIF

cNomInd := "TEMP" + cNomTer

// Crear el índice
INDEX ON Nombre_Tabla->Campo_Ordenamiento TO cNomInd FOR Condicion_Filtro

Si la expresión del filtro es la del índice activo, se puede usar una forma más sofisticada con la maquinaria del TBROWSE, y esto sí es rapidísimo.

Por ejemplo para traer los ítem de una factura, tabla cuyo índice es NroComprobante + NroItem.

Si necesitás algo así, pedímelo por mail, ya que es un poco largo.