Datenaktualisierung in der Client/Server-Beispielanwendung
Wenn Sie Daten in der Tabelle bearbeiten und für die Zwischenspeicherung die Einstellung No Buffering (CURSORSETPROP("Buffering", 1)
) festgelegt wurde, werden die Änderungen direkt an den Tabellendaten vorgenommen. Sie können weder Aktualisieren noch Wiederherstellen wählen.
Wenn Sie eine der anderen Zwischenspeicherungsoptionen wählen, stehen Ihnen die Optionen Aktualisieren und Wiederherstellen zur Verfügung.
Zur lokalen oder Remoteaktualisierung von zwischengespeicherten Daten verwenden Sie die TABLEUPDATE( )-Funktion. Die Argumente dieser Funktion ermöglichen es Ihnen, den Aktualisierungsbereich festzulegen. Darüber hinaus können Sie festlegen, ob Aktualisierungen erzwungen werden sollen. Die folgenden Codezeilen werden z. B. im Click-Ereignis der Schaltfläche Aktualisieren im Formular SampleApp ausgeführt:
lnUpdateType = THIS.Parent.opgUpdate.Value - 1
llForce = THIS.Parent.chkForce.Value
llUpdate = TABLEUPDATE(lnUpdateType, llForce)
Der Wert für lnUpdateType wird durch die unter Aktualisierungsbereich ausgewählte Option bestimmt.
Für den Gültigkeitsbereich stehen drei Optionen zur Verfügung:
Zeile aktualisieren
Wenn das erste Argument der TABLEUPDATE( )-Funktion 0 ist, wird nur die aktuelle Zeile erneuert, gleichgültig, ob Tabellen- oder Zeilenzwischenspeicherung aktiviert ist. Änderungen, die in anderen Zeilen vorgenommen wurden, werden nicht in die Datenquelle geschrieben.
Tabelle aktualisieren
Wenn das erste Argument der TABLEUPDATE( )-Funktion 1 ist, werden die geänderten Zeilen der Tabelle - beginnend mit der ersten aktualisierten Zeile - aktualisiert. Wenn ein Datenkonflikt auftritt, das heißt, wenn sich der Wert für CURVAL( ) eines Feldes in der Zeile vom Wert für OLDVAL( ) dieses Feldes unterscheidet, wird die Tabellenaktualisierung in der Zeile angehalten, in der der Konflikt auftritt.
Tabelle: Alles aktualisieren
Wenn das erste Argument der TABLEUPDATE( )-Funktion den Wert 2 aufweist, werden die geänderten Zeilen der Tabelle beginnen mit der ersten aktualisierten Zeile aktualisiert. Alle Zeilen ohne Datenkonflikt werden aktualisiert.
Weitere Optionen werden unter Aktualisierungsoptionen angegeben.
Erzwingen von Aktualisierungen
Das zweite Argument der Funktion TABLEUPDATE( ) gibt an, ob Aktualisierungen erzwungen werden sollen. Wenn Sie unter Aktualisierungsoptionen die Option Erzwingen wählen, ist das zweite Argument der TABLEUPDATE( )-Funktion Wahr (.T.), und die von Ihnen vorgenommenen Änderungen haben automatisch Vorrang vor allen Änderungen, die möglicherweise an den Daten vorgenommen wurden, nachdem Sie mit der Bearbeitung begonnen haben. Wenn Sie Aktualisierungen erzwingen, können keine Konflikte auftreten, die gelöst werden müssen.
Anmerkung Wenn Benutzer den Primärschlüssel eines Datensatzes geändert haben, kann die Zeile nicht aktualisiert werden und wird im lokalen Cursor gelöscht.
Konflikte lösen
Wenn die Option Konflikte lösen ausgewählt wurde, erkennt die Client/Server-Beispielanwendung Konflikte, während sie auftreten, und ermöglicht es Ihnen, die zueinander in Konflikt stehenden Daten anzuzeigen und zu entscheiden, ob Sie die vorliegenden Änderungen außer Kraft setzen oder Ihre eigenen Änderungen verwerfen möchten. Wenn die Option Konflikte lösen nicht ausgewählt wurde, werden die Daten nicht aktualisiert, falls ein Konflikt festgestellt wird.
IF THIS.parent.chkConflicts.Value
THISFORM.ResolveConflicts
ELSE
WAIT WINDOW 'Update failed' NOWAIT TIMEOUT 5
ENDIF
Weitere Informationen zur Konfliktlösung finden Sie unter "Verwalten von Datenkonflikten in der Client/Server-Beispielanwendung" weiter unten in diesem Abschnitt.
Geschäftsregeln
Wenn die Option Geschäftsregeln ausgewählt wurde, erzwingt die Client/Server-Beispielanwendung die Geschäftsregeln, die für diese Anwendung eingerichtet wurden. Weitere Informationen zur Option Geschäftsregeln finden Sie unter "Implementieren von Geschäftsregeln in die Client/Server-Beispielanwendung" weiter unten in diesem Abschnitt.
Upsizen der Tabelle "Employee"
Der Code für das Upsizen der Datenbank ist dem Click-Ereignis von cmdUpsize im Formular der Client/Server-Anwendung zugeordnet. Der Code führt folgende Aktionen durch:
- Herstellen einer Verbindung zur Back-End-Datenquelle.
- Löschen der Tabelle, sofern sie bereits existiert.
- Erstellen einer Zeichenfolge, die den SQL CREATE TABLE-Befehl enthält.
- Ausführen des SQL-Befehls durch Aufruf von SQLEXEC( ) mit der Zeichenfolge als Argument.
- Öffnen der Tabelle Employee.
- Öffnen der Remotesicht in der Datenbank.
- Anfügen der Datensätze der lokalen Tabelle an die Remotesicht.
- Aktualisieren der Remotesicht mit TABLEUPDATE( ).
Erstellen einer Offlinesicht
Der Code zum Erstellen oder Löschen einer Offlinesicht ist der Offline-Methode des Formulars SampleApp zugeordnet.
IF lcMode = 'create'
=CREATEOFFLINE(lcView)
ELSE
=DROPOFFLINE(lcView)
ENDIF
Siehe auch
Lösungsbeispiele | CURSORSETPROP-Funktion | SQLEXEC( )-Funktion | Client/Server-Beispiel | Client/Server-Beispielanwendung: Klassen | Client/Server-Beispielanwendung: Datenbank | Verwalten von Datenkonflikten in der Client/Server-Beispielanwendung | Implementieren von Geschäftsregeln in die Client/Server-Beispielanwendung