INDEXKEY() Devuelve la expresión clave del índice especificado ------------------------------------------------------------------------------ Sintaxis INDEXKEY(<nOrden>) --> cExpClave Argumentos <nOrden> es la posición 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 especifica 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 del í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(<nOrden>)). INDEXKEY() tiene diversas aplicaciones, pero dos en concreto son importantes. Con esta función puede obtener un TOTAL de la expresión clave del índice activo sin tener que especificar 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 adelante. 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 nombre ? INDEXKEY(ORD_SERIE) // Resultado: exp índice de serie ? INDEXKEY(ORD_NATURAL) // Resultado: exp índice de 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. EditarCampo() es una función definida por el usuario llamada desde DBEDIT() para editar el campo actual si el usuario ha pulsado una tecla de edición. #include "Dbedit.ch" #define ORD_NATURAL 0 FUNCTION EditarCampo() LOCAL valindice // Guarda el valor y expresión clave actual valindice = &(INDEXKEY(ORD_NATURAL)) . . <código para obtener 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 CLIPPER.LIB. To download this example - click here.
See Also: INDEX INDEXEXT() INDEXORD() SET INDEX SET ORDER