SETFLDSTATE( )-Funktion
Weist einem Feld oder Datensatz in einer Tabelle oder einem Cursor einen Feld- oder Löschstatuswert zu.
SETFLDSTATE(cFieldName | nFieldNumber, nFieldState [, cTableAlias
| nWorkArea])
Rückgabewerte
Logisch
Parameter
cFieldName | nFieldNumber
Gibt den Namen oder die Nummer des Feldes an, dem der Bearbeitungs- oder Löschstatus zugewiesen werden soll. 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.Um den Löschstatus des Datensatzes einzustellen, geben Sie als Feldnummer 0 an.
nFieldState
Gibt einen Wert für den Feld- oder Löschstatus an. Die folgende Tabelle listet die Werte für den Feld- oder Löschstatus und den entsprechenden Bearbeitungs- oder Löschstatus auf:nFieldState 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. cTableAlias
Gibt den Alias der Tabelle oder des Cursors an, in dem der Bearbeitungs- oder Löschstatus zugewiesen werden soll.nWorkArea
Gibt den Arbeitsbereich der Tabelle oder des Cursors an, in dem der Bearbeitungs- oder Löschstatus zugewiesen werden soll. Der Feld- oder Löschstatuswert wird der Tabelle oder dem Cursor zugewiesen, die/der im aktuell ausgewählten Arbeitsbereich geöffnet ist, wenn SETFLDSTATE( ) ohne die optionalen Argumente cTableAlias oder nWorkArea eingegeben wird.
Hinweise
Visual FoxPro verwendet Feldstatuswerte, um zu ermitteln, welche Felder in Tabellen oder Cursor aktualisiert sind. Mit SETFLDSTATE( ) können Sie steuern, für welche Felder Visual FoxPro einen Aktualisierungsversuch durchführt, unabhängig davon, welche Felder in der Tabelle oder im Cursor bearbeitet wurden.
Beispiel
Das folgende Beispiel zeigt, wie Sie SETFLDSTATE( ) einsetzen können, um den Feldstatus zu ändern. 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 eingegeben, um einen Wert (1) anzuzeigen, der dem nicht geänderten Status des Feldes cust_id
entspricht, bevor es geändert wird. Das Feld cust_id
wird mit REPLACE geändert. Anschließend wird GETFLDSTATE( ) erneut eingegeben, um einen Wert (2) anzuzeigen, der dem geänderten Status dieses Feldes entspricht.
Mit SETFLDSTATE(** **) wird dann der Feldstatus des Feldes cust_id
auf 1 (nicht geändert) zurückgesetzt. GETFLDSTATUS( ) wird erneut eingegeben und zeigt 1 an, entsprechend dem Status des Feldes cust_id
, der durch SETFLDSTATE( ) zugewiesen wurde. Mit TABLEREVERT( ) wird die Tabelle wieder in ihren ursprünglichen Status versetzt.
CLOSE DATABASES
SET MULTILOCKS ON && Must be on for table buffering
SET PATH TO (HOME(2) + 'Data\') && Sets path to database
OPEN DATABASE testdata && Open testdata database
USE Customer && Open customer table
= CURSORSETPROP('Buffering', 5, 'customer') && Enable table buffering
CLEAR
? GETFLDSTATE('cust_id') && Displays 1, not modified
REPLACE cust_id WITH '***' && Changes field contents
? GETFLDSTATE('cust_id') && Returns 2, field modified
= SETFLDSTATE('cust_id', 1) && Change the field status
? GETFLDSTATE('cust_id') && Displays 1, not modified
= TABLEREVERT(.T.) && Discard all table changes