INDEXKEY( )

Devuelve la expresión clave del índice especificado

Sintaxis

     INDEXKEY() –> cExpClave

Argumentos

es la posición original del índice en la lista de ficheros índice abierta por el último mandato USE…INDEX o SET INDEX TO en el rea de trabajo actual. Un valor cero expecifica el índice activo, independientemente de su posición real en la lista.

Devuelve

INDEXKEY() devuelve la expresión clave del índice especificado como una cadena de caracteres. Si no hay índice correspondiente o no se ha abierto ningún fichero de base de datos, INDEXKEY() devuelve una cadena nula.(“”).

Descripción

INDEXKEY() es una función de base de datos que determina la expresión clave de un índice especificado en el área de trabajo actual y la devuelve como una cadena de caracteres. Para evaluar la expresión clave, especifique INDEXKEY() como una macroexpresión similar a la siguiente:

     &(INDEXKEY()).

INDEXKEY() tiene cierto número de aplicaciones, pero dos en concreto son importantes. Con esta función puede totalizar la base de datos a través de la expresión clave en el código fuente. El otro caso tiene lugar en la función de usuario de DBEDIT(). Aquí puede ser necesario decidir si actualizar o no la pantalla después de que el usuario haya editado un registro. Normalmente, sólo es necesario actualizar la pantalla si ha cambiado la expresión clave del índice activo en el registro actual. Ambos ejemplos se describen más abajo.

Por defecto, INDEXKEY() actúa en el área de trabajo actualmente seleccionada. Puede hacer que actúe en un área de trabajo no seleccionada especificándola con una expresión de alias (consulte el ejemplo siguiente).

Ejemplos

     ¦  Este ejemplo accede a la expresión clave de los índices abiertos en el área de trabajo actual:

        #define ORD_NATURAL      0

        #define ORD_NOMBRE      1

        #define ORD_SERIE         2

        //

        USE Cliente INDEX Nombre, Serie NEW

        SET ORDER TO ORD_SERIE

        ? INDEXKEY(ORD_NOMBRE)        // Resultado: exp índice de nombres

        ? INDEXKEY(ORD_SERIE)          // Resultado: exp índice en serie

        ? INDEXKEY(ORD_NATURAL)     // Resultado: exp índice en serie

     ¦  Este ejemplo accede a la expresión clave del índice activo en un área de trabajo no seleccionada:

        USE Cliente INDEX Nombre, Serie NEW

        USE Ventas INDEX Vendedor NEW

        ? INDEXKEY(0), Cliente->(INDEXKEY(0))

     ¦  Este ejemplo utiliza INDEXKEY() como parte de una expresión TOTAL ON de clave. Observe que INDEXKEY() se especifica con una macroexpresión para obligar a evaluar la expresión:

        USE Ventas INDEX Vendedor NEW

        TOTAL ON &(INDEXKEY(0)) FIELDS CantidadVentas;

                                      TO ResumenVentas

     ¦  Este ejemplo utiliza INDEXKEY() para determinar si debe actualizarse la pantalla de DBEDIT() después de que el usuario haya editado el valor de campo actual. Normalmente, es necesario actualizar la pantalla DBEDIT() si el usuario cambia un campo que es parte de la clave del índice activo. EditarFichero() es una función definida por el usuario llamada desde una función DBEDIT() de usuario para editar el campo actual si el usuario ha pulsado una tecla de edición.

        #include “Dbedit.ch”

        #define ORD_NATURAL   0

        FUNCTION EditarFichero()

           LOCAL ValIndice

           // Guarda el valor y expresión clave actual

           ValIndice = &(INDEXKEY(ORD_NATURAL))

           .

           . <código para obtener (GET) el valor de campo actual>

           .

           // Actualizar la pantalla si ha cambiado el

           //valor clave

           IF ValIndice != &(INDEXKEY(ORD_NATURAL))

              nPeticion = DE_REFRESH

           ELSE

              nPeticion = DE_CONT

           ENDIF

           RETURN nPeticion

 Ficheros: La biblioteca asociada es DPXBASE.CH.