ORDCONDSET()
 Establece la condición y el ámbito de un orden
------------------------------------------------------------------------------
 Sintaxis

     ORDCONDSET([<cCondiciónFor>],
        [<bCondiciónFor>],
        [<lTodos>],
        [<bCondiciónWhile>],
        [<bEval>],
        [<nIntervalo>],
        [<nInicio>],
        [<nSiguiente>],
        [<nRegistro>],
        [<lResto>],
        [<lDescendente>],
        [<lAñadir>],
        [<lActual>],
        [<lPersonalizado>],
        [<lNoOptimizar>]) --> lExito

 Argumentos

     <cCondiciónFor> es una cadena de caracteres que especifica la
     condición FOR del orden. Esta cadena de caracteres es el valor devuelto
     por DBORDERINFO(DBOI_CONDITION, [<cFichIndice>], <cOrden>). Si esta
     información no es necesaria, puede especificarse una cadena de
     caracteres nula ("").

     <bCondiciónFor> es un bloque de código que define la condición FOR
     que los registros del ámbito deben cumplir para ser procesados. Si un
     registro no cumple esta condición, se ignora y se continúa procesando
     el siguiente. Si se utiliza una condición FOR, los valores clave
     duplicados no se incluyen en el fichero índice. Su valor por defecto es
     NIL.

     Esta condición (y no <cCondiciónFor>) es la que se utiliza para crear
     el orden. La condición FOR, a diferencia de la condición WHILE y de
     otras informaciones del ámbito, se almacena como parte del fichero
     índice y se utiliza para actualizar o volver a crear el orden con
     DBREINDEX(). Las limitaciones de la condición FOR dependen del RDD
     utilizado (si desea más información, consulte el capítulo "Arquitectura
     de los Controladores de Bases de Datos Sustituibles" en la Guía de
     Controladores).

     <lTodos> toma el valor verdadero (.T.) si el ámbito se refiere a
     todos los registros. Toma el valor falso (.F.) cuando se indican otras
     condiciones de ámbito (es decir, <nSiguiente>, <nRegistro> o <lResto>).
     El valor por defecto es falso (.F.).

     <bCondiciónWhile> es un bloque de código que define una condición
     que deben cumplir los registros para ser procesados. Si no se
     especifica ningún ámbito, <bCondiciónWhile> cambia el ámbito por
     defecto a <lResto>. La operación termina cuando se encuentra un
     registro que no cumpla la condición.

     La condición WHILE sólo se utiliza para crear el orden. No se almacena
     en el fichero índice ni se utiliza para actualizar o volver a crear el
     índice. Su valor por defecto es NIL.

     <bEval> es un bloque de código cuya frecuencia de evaluación viene
     determinada por <nIntervalo>. Puede servir para supervisar el estado de
     la operación de indexación mediante una barra de estado o de progreso.
     El valor devuelto por <bEval> debe ser de tipo lógico. La indexación
     se detiene si la evaluación del bloque devuelve el valor falso (.F.).
     Su valor por defecto es NIL.

     <nIntervalo> es una expresión numérica que determina el número de
     veces que se evalúa <bEval>. Este argumento mejora el rendimiento al
     permitir evaluar la condición en intervalos en vez de en cada registro.
     Para evaluar la condición en cada registro debe especificar un valor
     de 0 (el valor por defecto).

     <nInicio> es el número de registro inicial. Para comenzar al
     principio del fichero, especifique un valor de 0 (el valor por
     defecto).

     El ámbito se puede definir combinando <nInicio> con uno y sólo uno de
     los tres argumentos siguientes (utilice 0 o falso (.F.) para
     ignorarlos). El valor por defecto del ámbito es todos los registros. La
     información acerca del ámbito de los registros sólo se utiliza durante
     la creación del orden. Ni se almacena en el fichero ni se utiliza para
     actualizar o volver a crear el índice.

     <nSiguiente> es el número de registros que se van a procesar, a
     partir de <nInicio>. Especifique 0 si desea ignorar este argumento.

     <nRegistro> es el número de un único registro a procesar.
      Especifique 0 si desea ignorar este argumento.

     <lResto> si toma el valor verdadero (.T.) se procesan sólo los
     registros comprendidos entre <nInicio> y el final del fichero. El valor
     falso (.F.) indica que se procesen todos los registros.

     <lDescendente> especifica el sentido de la ordenación de las claves
     del índice y sus datos asociados. El valor verdadero (.T.) indica
     ordenación descendente de los valores y el valor falso (.F.) indica
     ordenación ascendente. El valor por defecto es falso (.F.).

     <lAñadir> especifica si los órdenes abiertos deben permanecer
     abiertos mientras se crea un nuevo índice. El valor verdadero (.T.)
     especifica que deben continuar abiertos. Falso (.F.) es el valor por
     defecto e indica que los índices abiertos se deben cerrar.

     <lActual> determina si sólo se incluirán en el orden los registros
     del orden de control que se encuentren dentro del rango actual
     especificado en ORDSETSCOPE(). El valor verdadero (.T.) indica que el
     rango y el orden de control definen el ámbito del nuevo orden. Falso
     (.F.) es el valor por defecto e indica que todos los registros del
     fichero de base de datos se incluirán en el orden.

     <lPersonalizado> especifica si el nuevo orden estará personalizado
     (sólo para RDDs que utilicen esta característica). El valor verdadero
     (.T.) especifica que se creará un orden personalizado, inicialmente
     vacío, y de cuyo mantenimiento se debe encargar el programador. El
     sistema no realiza de forma automática la inserción y borrado de claves
     en un orden personalizado. Debe ser el programador quien añada o borre
     claves utilizando ORDKEYADD() y ORDKEYDEL(). El valor falso (.F.)
     especifica un orden estándar mantenido por el sistema. El valor por
     defecto es falso (.F.).

     <lNoOptimizar> especifica si la condición FOR se debe optimizar
     (sólo para RDDs que admitan esta característica). El valor verdadero
     (.T.) optimiza la condición FOR, y el valor falso (.F.) no lo hace. El
     valor por defecto es falso (.F.).

 Devuelve

     ORDCONDSET() devuelve el valor verdadero (.T.) si se ejecuta
     satisfactoriamente; de lo contrario, devuelve el valor falso (.F.).

 Descripción

     Por defecto, ORDCONDSET() opera en el área de trabajo seleccionada. Si
     desea utilizarla en otra área de trabajo, debe especificarla con una
     expresión de alias.

     A menos que se indique lo contrario con ORDCONDSET(), los nuevos
     órdenes creados utilizarán las reglas de ámbito por defecto, procesando
     todos los registros del área de trabajo. ORDCONDSET() le permite
     especificar las condiciones y reglas de ámbito que deben cumplir los
     registros que se incluirán en el próximo orden que se cree. Al crear un
     nuevo orden se vuelven a establecer de forma automática las reglas de
     ámbito por defecto del área de trabajo. De esta forma, es necesario
     llamar a ORDCONDSET() para modificar el ámbito predefinido cada vez que
     quiera crear un nuevo orden.

     Esta función es esencial si se quiere crear órdenes condicionales con
     DBCREATEINDEX(), ya que esta última función no dispone de ningún
     argumento para hacerlo.

 Ejemplos

      El ejemplo siguiente establece la condición para la creación
        de órdenes:

        LOCAL cFor
        LOCAL lTodos, lResto, lDescendente
        LOCAL bCondicionFor, bCondicionWhile, bEval
        LOCAL nIntervalo, nInicio, nSiguiente, nRegistro AS SHORTINT
        // Expresión FOR en forma de cadena de caracteres
        cFor := 'UPPER(Nombre) = "MARI PAZ"'
        // Condición FOR actual
        bCondicionFor := {|| UPPER(Nombre) = "MARI PAZ"}
        lTodos := .T.
        bCondicionWhile := {|| .T.}             // Mientras todo
        bEval := {|| Nombre + Ciudad}           // Bloque de código del
                                                // índice
        nIntervalo := 0                         // Procesar todos
        nInicio:= 0                             // A partir del primero
        nSiguiente := 0                         // Todos
        nRegistro := 0                          // Todos los registros
        lResto := .F.                           // Todos
        lDescendente := .F.                     // Ascendente
        ORDCONDSET(cFor, bCondicionFor, lTodos, ;
           bCondicionWhile, bEval, nIntervalo, nInicio, ;
           nSiguiente, nRegistro, lResto, lDescendente)

 Ficheros   La biblioteca asociada es CLIPPER.LIB.

 To download this example - click here.

See Also: DBORDERINFO() INDEX ORDKEYADD()