ORDCOND()
 Especifica condiciones de ordenación
------------------------------------------------------------------------------
 Sintaxis

     ORDCOND ([ FOR < lCondición > ]
        [ ALL ] [ WHILE <lCondición > ]
        [ EVAL < bBloque > [ EVERY < nIntervalo > ] ]
        [ RECORD < nRegistro > ] [ NEXT < nNúmero > ]
        [ REST ] [ DESCENDING ])

 Argumentos

     FOR <lCondición> especifica el conjunto condicional de registros
     que se van a incluir en el índice. Sólo se incluyen en la ordenación
     los registros que cumplan esta condición. Cuando se utilizan los
     controladores DBFNTX y DBFNDX, el tamaño de la expresión <lCondición>
     no puede superar los 250 caracteres. El tamaño máximo de una expresión
     FOR depende del RDD. La condición FOR se almacena como parte del
     contenedor de órdenes y se utiliza al actualizar o volver a crear el
     índice con las funciones ORDCREATE() y ORDREBUILD(). Los valores
     duplicados de una clave no se añaden a un contenedor de órdenes.

     La utilización de la cláusula FOR en controladores que no la admitan
     produce un error.

     La cláusula FOR proporciona el único ámbito en el que se reflejan
     automáticamente todos los cambios que se producen en la base de datos.
     Las demás condiciones de ámbito crean órdenes que no reflejan
     actualizaciones de la base de datos.

     ALL incluye todos los órdenes del área de trabajo actual o del área
     de trabajo especificada. Es el ámbito por defecto de ORDCOND().

     WHILE <lCondición> especifica otra condición adicional que deben
     cumplir todos los registros al procesarse. La función ORDCREATE()
     terminará al encontrar un registro que no cumple esta condición. Si se
     especifica una cláusula WHILE, los datos se procesan en el orden de
     control. La condición WHILE es temporal (es decir, no se guarda en el
     fichero ni se utiliza para actualizar el índice con ORDREBUILD()). La
     cláusula WHILE crea órdenes temporales, que no se actualizan.

     La utilización de la cláusula WHILE en controladores que no la admitan
     produce un error.

     La cláusula WHILE es más rápida y eficiente que la cláusula FOR. WHILE
     sólo procesa datos para los que la condición <lCondición> toma el valor
     verdadero (.T.). Sin embargo, la cláusula FOR procesa todos los datos
     de la fuente de datos.

     EVAL <bBloque> evalúa un bloque de código cada cierto intervalo
     <nIntervalo>, donde <nIntervalo> es un valor especificado en la
     cláusula EVERY. El valor por defecto es 1. Esta cláusula ofrece una
     forma flexible de supervisar el estado de la operación de indexación
     mediante una barra de estado o de progreso. El valor devuelto por
     <bBloque> debe ser de tipo lógico. La indexación se detiene si
     <bBloque> devuelve el valor falso (.F.).

     EVERY <nIntervalo> es una cláusula que contiene una expresión
     numérica que modifica la frecuencia con la que se evalúa <bBloque> con
     EVAL. La opción EVERY de la cláusula EVAL mejora el rendimiento al
     permitir evaluar la condición cada n registros en vez de uno a uno. La
     palabra clave EVERY se ignora si no se especifica una condición EVAL.

     RECORD <nRegistro> especifica el registro que se va a procesar.

     NEXT <nNúmero> especifica la porción de la base de datos que se va
     a procesar. Si se especifica NEXT, se procesan <nNúmero> identidades de
     la base de datos siguiendo el orden de control. El ámbito es temporal
     (es decir, no se guarda en el orden y no se utiliza para actualizar el
     índice con ORDREBUILD).

     REST especifica que se deben procesar todos los registros desde la
     posición actual del puntero del registro hasta el final del fichero
      (EOF).

     DESCENDING especifica que las claves del índice y sus datos
     asociados se clasifican en orden descendente. Al crear un índice con
     ordenación descendente, no es necesario utilizar la función DESCEND()
     durante una búsqueda. DESCENDING es un atributo que se almacena dentro
     del fichero índice por lo que se puede utilizar para actualizar el
     índice con ORDREBUILD.

 Descripción

     ORDCOND() está diseñada para establecer las condiciones que rigen la
     creación de nuevos índices (utilizando la función ORDCREATE()) o
     actualizar los ya existentes (utilizando la función ORDREBUILD()). No
     utilice la función ORDCOND() si lo que desea es crear o actualizar un
     fichero índice entero; sólo debe utilizarse para establecer condiciones
     del  índice.

     La función ORDCOND() debe usarse inmediatamente antes de llamar a las
     funciones ORDCREATE() u ORDREBUILD().

     Si no se especifica una cláusula DESCENDING, se asume por defecto el
     orden ascendente.

     La cláusula EVAL permite especificar un bloque de código que se evalúa
     cada vez que se inserta un registro en el orden. La cláusula EVERY
     permite modificar la frecuencia con la que se evalúa el bloque de
     código <bBloque>. En lugar de evaluar la condición para cada registro
     que se inserta en el orden, se evalúa cada <nIntervalo> registros. Esto
     resulta de utilidad para crear, por ejemplo, una barra que refleje el
     progreso de ORDCREATE() y ORDREBUILD().

     La cláusula FOR proporciona el único orden cuyo ámbito es permanente y
     se mantiene a lo largo de toda la vida de la aplicación. La cadena de
     caracteres que se le pasa a la condición FOR se almacena dentro del
     orden para utilizarla, más tarde, en su mantenimiento. Los órdenes
     creados con esta cláusula sólo acceden a una parte de la base de datos,
     pero existen mientras la base de datos está activa. La cláusula FOR
     permite crear órdenes con ámbito permanente.

     Las cláusulas WHILE, NEXT y RECORD procesan datos a partir de la
     posición actual del cursor en el área de trabajo por defecto o en el
     área de trabajo especificada. Si se declaran estas cláusulas, la lista
     de órdenes permanece abierta y se utiliza el orden activo para
     organizar la base de datos. Estas cláusulas crean órdenes temporales
     (sin ámbito permanente) que contienen registros para los que
     <lCondición> toma el valor verdadero (.T.).

 Ejemplos

      El ejemplo siguiente crea un orden condicional utilizando una
        condición FOR. El índice sólo contiene aquellos registros cuyo campo
        FechaExp contenga una fecha posterior o igual al 1 de enero de
        1995:

        USE Factura NEW
        ORDCOND ( FOR ( Factura->FechaExp >= CTOD( "01/01/95" ) ) )
        ORDCREATE( "FechaFact" , , "Factura->FechaFact" )

      El ejemplo siguiente crea un índice y llama a la rutina
        MiFuncion durante su creación:

        USE Factura NEW
        ORDCOND ( EVAL { | | MiFuncion() } EVERY MTR_INCREMENT )
        ORDCREATE("Factura" , , "Factura->Cliente")

 To download this example - click here.

See Also: INDEX ORDCREATE() ORDLISTREBUI()