DBEVAL( )

  Evalúa un bloque de código en 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 un bloque de código que va a ejecutarse en 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 un 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 un ámbito y/o condición especificada. 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 DPXBASE 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 Programación y Utilidades. Consulte también el apartado Sistema de Base de Datos en el capítulo Conceptos Básicos si desea más información sobre el ámbito y condiciones de registros; y el fichero de cabecera estándar de DPXBASE, STD.CH, que se encuentra en \DPXBASE5\INCLUDE si desea ejemplos sobre definiciones de mandatos de base de datos de DPXBASE, 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 que resulte 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, miContar

        USE Cliente NEW

        CREATE SCOPE miConjunto FOR Cliente = “López” WHILE ;

                  CodPostal > “90000”

        miContar := Contar( miConjunto )

        RETURN

 

        FUNCTION Contar( aAmbito )

           LOCAL nContar := 0

           DBEVAL( { nContar++},;

              aAmbito[ FOR_COND ],;

              aAmbito[ WHILE_COND ],;

              aAmbito[ NEXT_SCOPE ],;

              aAmbito[ REC_SCOPE ],;

              aAmbito[ REST_SCOPE ];

           )

           RETURN nContar

 Ficheros: La biblioteca asociada es DPXBASE.CH