Freigeben über


GETFLDSTATE( )-Funktion

Gibt einen numerischen Wert zurück, der anzeigt, ob ein Feld einer Tabelle oder eines Cursors bearbeitet oder ein Datensatz angefügt wurde oder ob sich der Löschstatus des aktuellen Datensatzes geändert hat.

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

Rückgabewerte

**Numerischer Wert, Zeichenwert oder .**NULL.

Parameter

  • cFieldName | nFieldNumber
    Gibt den Namen oder die Nummer des Feldes an, dessen Bearbeitungsstatus zurückgegeben wird. Die Feldnummer nFieldNumber entspricht der Position des Feldes in der Tabellen- oder Cursorstruktur. Die Feldnummer können Sie mit Hilfe von DISPLAY STRUCTURE oder FIELD( ) ermitteln.

    Sie können für nFieldNumber -1 angeben, um eine Zeichenfolge zurückzugeben, die aus den Lösch- und Bearbeitungsstatuswerten für alle Felder der Tabelle oder der Cursor-Datei besteht. Wenn eine Tabelle z. B. fünf Felder hat und nur das erste Feld bearbeitet wurde, gibt GETFLDSTATE( ) Folgendes zurück:

    121111
    

    Die 1 an der ersten Stelle zeigt an, dass sich der Löschstatus nicht geändert hat.

    Sie können auch 0 für nFieldNumber angeben, um zu ermitteln, ob sich der Löschstatus des aktuellen Datensatzes geändert hat, seit die Tabelle oder der Cursor geöffnet wurde.

    Anmerkung   Mit Hilfe von GETFLDSTATE( ) können Sie nur ermitteln, ob sich der Löschstatus des aktuellen Datensatzes geändert hat. Wenn Sie z. B. einen Datensatz zum Löschen markieren und das Löschen dann wieder rückgängig machen, gibt GETFLDSTATE( ) zurück, dass sich der Löschstatus geändert hat, obwohl eigentlich der ursprüngliche Löschstatus des Datensatzes wiederhergestellt wurde. Verwenden Sie DELETED( ), um festzustellen, ob ein Datensatz aktuell zum Löschen markiert ist.

  • cTableAlias
    Gibt den Alias der Tabelle oder des Cursors an, für den der Bearbeitungsstatus von Feldern oder der Löschstatus von Datensätzen zurückgegeben werden soll.

  • nWorkArea
    Gibt den Arbeitsbereich der Tabelle oder des Cursors an, für den der Bearbeitungsstatus von Feldern oder der Löschstatus von Datensätzen zurückgegeben werden soll.

    Wenn Sie keinen Alias oder Arbeitsbereich angeben, gibt GETFLDSTATE( ) einen Wert für ein Feld der aktuellen Tabelle oder des aktuellen Cursors zurück.

Hinweise

In der folgenden Tabelle sind die Rückgabewerte mit dem jeweils zugehörigen Bearbeitungs- oder Löschstatus aufgelistet.

Rückgabewert Bearbeitungs- oder Löschstatus
1 Das Feld wurde nicht bearbeitet, oder der Löschstatus hat sich nicht geändert.
2 Das Feld wurde bearbeitet, oder der Löschstatus hat sich geändert.
3 Ein Feld eines angefügten Datensatzes wurde nicht bearbeitet, oder der Löschstatus dieses Datensatzes hat sich nicht geändert.
4 Ein Feld eines angefügten Datensatzes wurde bearbeitet, oder der Löschstatus dieses Datensatzes hat sich geändert.
.NULL. Bei EOF( )

Damit GETFLDSTATE( ) auf lokalen Tabellen ausgeführt werden kann, muss zunächst die Zeilen- oder Tabellenpufferung mit Hilfe von CURSORSETPROP( ) aktiviert werden.

Der Bearbeitungs- oder Löschstatus wird für die Tabelle oder den Cursor zurückgegeben, die bzw. der im aktuellen Arbeitsbereich geöffnet ist, wenn GETFLDSTATE( ) ohne die optionalen Argumente cTableAlias oder nWorkArea eingegeben wird.

Beispiel

Das folgende Beispiel veranschaulicht, wie Sie mit Hilfe von GETFLDSTATE( ) feststellen können, ob sich der Inhalt eines Feldes geändert hat. Als Notwendigkeit für die Tabellenpufferung wird MULTILOCKS auf ON gesetzt. Die Tabelle customer der Datenbank testdata wird geöffnet, und der Zwischenspeicherungsmodus wird durch CURSORSETPROP( ) auf 5 - Optimistische Tabellenpufferung gesetzt.

GETFLDSTATE( ) wird ausgeführt, um einen Wert (1) anzuzeigen, der dem nicht geänderten Status des Feldes cust_id entspricht, bevor es bearbeitet wird. Das Feld cust_id wird mit REPLACE bearbeitet. Anschließend wird GETFLDSTATE( ) erneut verwendet, um einen Wert (2) anzuzeigen, der dem geänderten Status dieses Feldes entspricht. Mit Hilfe von TABLEREVERT( ) wird die Tabelle in ihren ursprünglichen Status zurückversetzt, und mit GETFLDSTATE( ) wird ein Wert (1) angezeigt, der dem ursprünglichen Status des Feldes cust_id entspricht.

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

Siehe auch

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