Freigeben über


TABLEUPDATE( )-Funktion

Führt für Änderungen, die an einer gepufferten Zeile, einer gepufferten Tabelle oder einem Cursor vorgenommen wurden, ein Commit aus.

TABLEUPDATE([nRows [, lForce]] [, cTableAlias | nWorkArea]
[, cErrorArray])

Rückgabewerte

Logisch

Parameter

  • nRows
    Legt fest, welche an der Tabelle oder dem Cursor vorgenommenen Änderungen übergeben werden sollen. Wenn nRows gleich 0 (oder .F.) ist und Zeilen- oder Tabellenpufferung aktiv ist, werden nur Änderungen übertragen, die am aktuellen Datensatz der Tabelle oder des Cursors vorgenommen wurden.

    Wenn nRows gleich 1 und Tabellenpufferung aktiv ist, werden alle an den Datensätzen der Tabelle oder des Cursors vorgenommenen Änderungen übergeben. Wenn nRows gleich 1 (oder .T.) ist und Zeilenpufferung aktiv ist, werden nur Änderungen übertragen, die am aktuellen Datensatz der Tabelle oder des Cursors vorgenommen wurden.

    Wenn nRows gleich 2 ist, werden Änderungen der Tabelle oder des Cursors in der gleichen Weise übergeben, wie wenn nRows gleich 1 (oder .T.) ist. Es tritt jedoch kein Fehler auf, wenn eine Änderung nicht übergeben werden kann, und Visual FoxPro verarbeitet weiter alle verbleibenden Datensätze in der Tabelle oder dem Cursor. Bei der Verwendung von cErrorArray wird ein Array mit Fehlerinformationen erzeugt, sobald ein Fehler auftritt.

    Der Standardwert für nRows ist 0.

  • lForce
    Legt fest, ob von einem anderen Benutzer im Netzwerk vorgenommene Änderungen an der Tabelle oder dem Cursor überschrieben werden. Wenn lForce gleich Wahr (.T.) ist, werden alle Änderungen an der Tabelle oder dem Cursor, die von einem anderen Netzwerkbenutzer vorgenommen wurden, überschrieben.

    Wenn lForce gleich Falsch (.F.) ist, führt Visual FoxPro Änderungen an der Tabelle oder dem Cursor durch, und zwar vom ersten Datensatz bis zum Ende der Tabelle oder des Cursors. Wenn ein Datensatz gefunden wird, der von einem anderen Netzwerkbenutzer geändert wurde, generiert Visual FoxPro einen Fehler.

    Wenn Visual FoxPro den Fehler generiert, können Sie den Fehler mit einer ON ERROR-Routine behandeln, und die ON ERROR-Routine kann TABLEUPDATE( ) ausführen, wobei lForce auf Wahr (.T.) gesetzt ist, um Änderungen am Datensatz zu übergeben. Alternativ kann die ON ERROR-Routine für den Fall, dass eine Transaktion ausgeführt wird, den Fehler behandeln und dann ROLLBACK ausführen, um die Tabelle oder den Cursor in den ursprünglichen Zustand zurückzuversetzen.

    Der Standardwert für lForce ist Falsch (.F.).

  • cTableAlias
    Gibt den Alias der Tabelle oder des Cursors an, an die bzw. an den die Änderungen übergeben werden. Wenn Sie ein Tabellen- oder Cursoralias angeben, müssen Sie auch das lForce-Argument angeben.

  • nWorkArea
    Gibt den Arbeitsbereich der Tabelle oder des Cursors an, an die bzw. an den die Änderungen übergeben werden. Wenn Sie einen Arbeitsbereich angeben, müssen Sie auch das lForce-Argument angeben.

  • cErrorArray
    Gibt den Namen eines Arrays an, das erzeugt wird, wenn nRows gleich 2 ist und die Änderungen nicht an einen Datensatz übergeben werden können. Das Array enthält eine einzelne Spalte, die die Nummern der Datensätze enthält, für die Änderungen nicht übergeben werden sollen. Wenn Sie den Namen eines Arrays angeben, müssen Sie auch entweder ein Tabellen- oder Cursoralias, cTableAlias oder eine Arbeitsbereichszahl nWorkArea angeben.

    Anmerkung   Wenn während der Aktualisierung von Datensätzen ein anderer als ein einfacher Übergabefehler auftritt, enthält das erste Element von cErrorArray –1, und Sie können AERROR( ) verwenden, um herauszufinden, warum die Änderungen nicht übergeben werden konnten.

Hinweise

TABLEUPDATE( ) gibt Wahr (.T.) zurück, wenn Änderungen für alle Datensätze zurückgegeben werden, anderenfalls wird Falsch (.F.) zurückgegeben. Wird 0 oder 1 für nRow angegeben, bleibt der Datensatzzeiger auf dem Datensatz, wo keine Änderungen übergeben werden konnten. Sie können dann mit AERROR( ) feststellen, warum die Änderungen nicht übergeben werden konnten.

TABLEUPDATE( ) kann keine Änderungen übergeben, die an einer Tabelle oder an einem Cursor vorgenommen wurden, für die bzw. für den keine Zeilen- oder Tabellenpufferung aktiv ist. Wenn Sie TABLEUPDATE( ) eingeben und weder Zeilen- noch Tabellenpufferung aktiv ist, zeigt Visual FoxPro eine Fehlermeldung an. TABLEUPDATE( ) kann jedoch immer noch Änderungen an einer Tabelle oder einem Cursor durchführen, wenn dafür Gültigkeitsregeln gelten. Verwenden Sie CURSORSETPROP( ) zum Aktivieren und Deaktivieren der Zeilen- und Tabellenpufferung.

Änderungen werden an die Tabelle oder den Cursor übergeben, die bzw. der im aktuell ausgewählten Arbeitsbereich geöffnet ist, wenn TABLEUPDATE( ) ohne die optionalen Argumente cTableAlias oder nWorkArea eingegeben wird.

Wenn die Tabellenpufferung verwendet wird und mehrere Datensätze aktualisiert werden, bewegt TABLEUPDATE( ) den Datensatzzeiger zum zuletzt aktualisierten Datensatz.

Anmerkung   Das Aufrufen von TABLEUPDATE( ) für eine lokale Tabelle oder eine Ansicht, die keine Schlüsselfelder verwendet, erzeugt eine lange WHERE-Klausel, um die aktualisierte Zeile zu finden. Die Standardanzahl von Feldern, die in der WHERE-Klausel unterstützt werden, ist 40. Wenn Sie den Fehler 1812 - SQL: Statement Too Long erhalten, sollten Sie entweder ein Schlüsselfeld verwenden oder den Umfang der WHERE-Klausel mit SYS(3055) vergrößern. Bei Verwendung von SYS(3055) erhöhen Sie den Wert auf die achtfache Anzahl der in der Tabelle enthaltenen Felder: = SYS(3055, 8 * MIN(40, FCOUNT( ))

Beispiel

Das folgende Beispiel zeigt, wie TABLEUPDATE( ) verwendet wird, um Änderungen an einer gepufferten Tabelle zu übergeben. Eine Tabelle namens employees wird erzeugt und mit INSERT - SQL der Wert "Smith" in das Feld cLastName eingefügt.

Als Notwendigkeit für die Tabellenpufferung wird MULTILOCKS auf ON gesetzt. Mit Hilfe von CURSORSETPROP( ) wird der Puffermodus auf optimistische Tabellenpufferung (5) gesetzt.

Der Ausgangswert des Feldes cLastName (Smith) wird angezeigt. Dann wird das Feld cLastName mit REPLACE bearbeitet. Der neue Wert des Feldes cLastName (Jones) wird angezeigt. TABLEUPDATE( ) wird dann verwendet, um die Änderungen an der Tabelle zu übergeben (mit TABLEREVERT( ) könnten stattdessen die Änderungen gelöscht werden). Der aktualisierte Wert des Feldes cLastName (Jones) wird angezeigt.

CLOSE DATABASES
CREATE TABLE employee (cLastName C(10))
SET MULTILOCKS ON  && Must be on for table buffering
= CURSORSETPROP('Buffering', 5, 'employee' )  && Enable table buffering
INSERT INTO employee (cLastName) VALUES ('Smith')

CLEAR
? 'Original cLastName value: '
?? cLastName  && Displays current cLastName value (Smith)

REPLACE cLastName WITH 'Jones'
? 'New cLastName value: '
?? cLastName  && Displays new cLastName value (Jones)

= TABLEUPDATE(.T.)  && Commits changes
? 'Updated cLastName value: '
?? cLastName  && Displays current cLastName value (Jones)

Siehe auch

CURSORSETPROP( ) | CURVAL( ) | OLDVAL( ) | TABLEREVERT( ) |