Share via


GETFLDSTATE( ) (Función)

Devuelve un valor numérico indicando si se ha editado o anexado un campo de una tabla o un cursor, si se ha anexado un registro o si ha cambiado el estado eliminado del registro actual.

GETFLDSTATE(cFieldName | nFieldNumber [, cTableAlias | nWorkArea])

Valores devueltos

Valor de tipo Numeric, Character o .NULL.

Parámetros

  • cFieldName | nFieldNumber
    Especifica el nombre del campo o el número del campo para el que se devuelve el estado de edición. El número de campo nFieldNumber corresponde a la posición del campo en la tabla o estructura del cursor. DISPLAY STRUCTURE o FIELD( ) pueden emplearse para determinar el número de un campo.

    Puede especificar –1 como nFieldNumber para devolver una cadena de caracteres que conste de valores de estado de edición y eliminación para todos los campos de la tabla o el cursor. Por ejemplo, si una tabla tiene cinco campos y sólo se ha editado el primer campo, GETFLDSTATE( ) devuelve lo siguiente:

    121111
    

    El 1 de la primera posición indica que no ha cambiado el estado de eliminación.

    También puede incluir 0 como nFieldNumber para determinar si ha cambiado el estado de eliminación del registro actual desde que se abrió la tabla o el cursor.

    Nota   GETFLDSTATE( ) sólo determina si ha cambiado el estado de eliminación del registro actual. Por ejemplo, si marca un registro para eliminarlo y, posteriormente, lo desmarca, GETFLDSTATE( ) indica que ha cambiado el estado de eliminación aunque el estado de eliminación del registro ha vuelto a su estado original. Utilice DELETED( ) para determinar el estado de eliminación actual de un registro.

  • cTableAlias
    Especifica el alias de la tabla o el cursor para el que se devuelve el estado de edición de campo o eliminación de registro.

  • nWorkArea
    Especifica el área de trabajo de la tabla o el cursor para el que se devuelve el estado de edición de campo o eliminación de registro.

    Si no especifica un alias o un área de trabajo GETFLDSTATE( ) devuelve un valor para un campo de la tabla o el cursor seleccionado actualmente.

Observaciones

La tabla siguiente muestra los valores de los caracteres devueltos y el estado de edición o eliminación correspondiente.

Valor devuelto Estado de edición o eliminación
1 No se ha editado el campo o no ha cambiado el estado de eliminación.
2 Se ha editado el campo o ha cambiado el estado de eliminación.
3 No se ha editado el campo de un registro anexado o no ha cambiado el estado de eliminación del registro anexado.
4 Se ha editado el campo de un registro anexado o ha cambiado el estado de eliminación para el registro anexado.
.NULL. En EOF( )

El almacenamiento de filas o tablas en búfer debe activarse en primer lugar con CURSORSETPROP( ) para que GETFLDSTATE( ) funcione en tablas locales.

Se devuelve el estado de edición o eliminación para la tabla o el cursor abierto en el área de trabajo seleccionada actualmente si se ejecuta GETFLDSTATE( ) sin los argumentos opcionales cTableAlias o nWorkArea.

Ejemplo

El ejemplo siguiente demuestra cómo puede usar GETFLDSTATE( ) para determinar si el contenido de un campo ha cambiado. MULTILOCKS se establece en ON, un requisito para el almacenamiento de tablas en búfer. Se abre la tabla customer de la base de datos testdata y se usa CURSORSETPROP( ) para establecer el modo de almacenamiento optimista de tablas en búfer (5).

Se ejecuta GETFLDSTATE( ) para mostrar un valor (1) correspondiente al estado no modificado del campo cust_id antes de modificarlo. Se modifica el campo cust_id con REPLACE, y se vuelve a ejecutar GETFLDSTATE( ) para mostrar un valor (2) correspondiente al estado modificado del campo cust_id. TABLEREVERT( ) se usa para devolver la tabla a su estado original y vuelve a usarse GETFLDSTATE( ) para mostrar un valor (1) correspondiente al estado original del campo cust_id.

CLOSE DATABASES
CLEAR

SET MULTILOCKS ON         && Allow table buffering
OPEN DATABASE (HOME(2) + 'data\testdata')
USE Customer             && Open customer table
=CURSORSETPROP("Buffering",5,"customer")  && Enable table buffering

* Get field state on original cust_id field and display state
nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState

* Change field contents and display state
REPLACE cust_id    WITH "***"
nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState

* Discard table changes and display state
= TABLEREVERT(.T.)        && Discard all table changes
nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState

PROCEDURE DisplayState
PARAMETER nState
DO CASE
   CASE nState=1
      =MESSAGEBOX("Field has not been modified",0,"Results")
   OTHERWISE
      =MESSAGEBOX("Field has been modified",0,"Results")
ENDCASE

Vea también

CURVAL( ) | DELETED( ) | FIELD( ) | OLDVAL( ) | CURSORSETPROP( ) | SETFLDSTATE( )