DBEVAL()
 Evalúa un bloque de código para cada registro dentro de un ámbito que
 cumpla una condición
------------------------------------------------------------------------------
 Sintaxis

     DBEVAL(<bBloque>,
        [<bCondiciónFor>],
        [<bCondiciónWhile>],
        [<nRegistrosSiguientes>],
        [<nRegistro>],
        [<lResto>]) --> NIL

 Argumentos

     <bBloque> es el bloque de código que va a ejecutarse para cada
     registro procesado.

     <bCondiciónFor> es una condición opcional especificada como un
     bloque de código, que se evalúa en cada registro del ámbito. Realiza la
     misma función que la cláusula FOR de mandatos de tratamiento de
     registros.

     <bCondiciónWhile> es una condición opcional especificada como un
     bloque de código, que se evalúa en cada registro del fichero actual,
     hasta que la condición devuelva falso (.F.). Realiza la misma función
     que la cláusula WHILE de los mandatos de tratamiento de registros.

     <nRegistrosSiguientes> es un número opcional, que especifica el
     número de registros que van a procesarse, empezando por el actual. Es
     idéntico a la cláusula NEXT.

     <nRegistro> es el número de registro opcional que va a procesarse.
     Si se especifica este argumento, <bBloque> se evalúa para el registro
     especificado. Este argumento es idéntico a la cláusula RECORD.

     <lResto> es un valor lógico opcional, que determina si el ámbito de
     DBEVAL() es todos los registros del fichero o todos los registros desde
     el registro actual. Este argumento corresponde a las cláusulas REST y
     ALL de los mandatos de tratamiento de registros. Si es verdadero (.T.),
     el ámbito es REST; de lo contrario, el ámbito es ALL. Si no se
     especifica <lResto>, el ámbito por defecto es todos los registros.

 Devuelve

     DBEVAL() devuelve siempre NIL.

 Descripción

     DBEVAL() es una función de base de datos, que evalúa un único bloque de
     código para cada registro del área de trabajo actual que cumpla una
     condición y/o un ámbito especificado. En cada iteración, DBEVAL()
     evalúa el bloque especificado. Se procesan todos los registros dentro
     del ámbito o que cumplan la condición, hasta alcanzar el final del
     fichero.

     Por defecto, DBEVAL() actúa en el área de trabajo actual. Si desea
     utilizarla en otra área de trabajo, debe especificarla con una
     expresión de alias.

     DBEVAL() es similar a AEVAL(), que aplica un bloque a cada elemento de
     una matriz. Al igual que AEVAL(), DBEVAL() puede utilizarse como
     primitiva para la creación de mandatos definidos por el usuario para
     ficheros de base de datos. De hecho, existen diversos mandatos de
     tratamiento de base de datos de CA-Clipper que se crean por medio de
     DBEVAL().

     Si desea más información sobre la sintaxis y teoría de los bloques de
     código, consulte el apartado Bloques de Código en el capítulo
     "Conceptos Básicos" de la Guía de Programación y Utilidades. Consulte
     también el apartado Sistema de Base de Datos en el mismo capítulo
     "Conceptos Básicos" si desea más información sobre el ámbito y
     condiciones de registros. El fichero de cabecera estándar de
     CA-Clipper, Std.ch, que se encuentra en \CLIP53\INCLUDE ofrece ejemplos
     sobre definiciones de mandatos de base de datos de CA-Clipper, que
     utilizan DBEVAL().

 Ejemplos

      Este ejemplo utiliza DBEVAL() para crear Contar(), una función
        definida por el usuario, que cuenta el número de registros en un
        área de trabajo comprendidos en un ámbito especificado. El ámbito se
        pasa como una matriz a Contar(). Para que los ejemplos resulten más
        interesantes, existe un mandato definido por el usuario que crea la
        matriz de ámbito, que permite especificar el ámbito de forma
        familiar. Además, existe un conjunto de constantes declaradas que
        definen los atributos del objeto de ámbito.

        // Definición de mandato de ámbito
        #command CREATE SCOPE <aAmbito> [FOR <for>] ;
           [WHILE <while>] [NEXT <next>] [RECORD <rec>] ;
           [<rest:REST>] [ALL];
        =>;
           <aAmbito> := { <{for}>, <{while}>, <next>, ;
              <rec>, <.rest.> }
        //

        // Constantes de atributos de ámbito
        #define FOR_COND           1
        #define WHILE_COND         2
        #define NEXT_SCOPE         3
        #define REC_SCOPE          4
        #define REST_SCOPE         5
        //
        // Crear un ámbito y contar registros usándolo
        LOCAL miConjunto, miContador
        USE Cliente NEW
        CREATE SCOPE miConjunto FOR Cliente = "López" WHILE ;
                   CodPostal > "90000"
        miContador := Contar( miConjunto )
        RETURN

        FUNCTION Contar( aAmbito )
           LOCAL nContador := 0
           DBEVAL( {|| nContador++},;
              aAmbito[ FOR_COND ],;
              aAmbito[ WHILE_COND ],;
              aAmbito[ NEXT_SCOPE ],;
              aAmbito[ REC_SCOPE ],;
              aAmbito[ REST_SCOPE ];
           )
           RETURN nContador

 Ficheros   La biblioteca asociada es CLIPPER.LIB
 To download this example - click here.

See Also: AEVAL() EVAL()