Freigeben über


Aktualisieren der Onlinedaten

Nachdem Sie die Offlinearbeit beendet haben, können Sie die Daten auf dem Server mit Hilfe derselben Transaktionen aktualisieren, die Sie auch für Onlinedaten verwenden. Beim Arbeiten mit Remotedaten sollten Sie folgende Tipps beachten:

  • Führen Sie einzelne Datensatzaktualisierungen mit automatischen Transaktionen durch.
  • Führen Sie Batchaktualisierungen mit manuellen Transaktionen durch.
  • Fügen Sie ggf. Code zum Feststellen von Aktualisierungskonflikten ein, erstellen Sie ein Protokoll der Konflikte, und beseitigen Sie diese.

Bevor Sie die Aktualisierungen verarbeiten können, müssen Sie mit dem USE-Befehl und dem Schlüsselwort ONLINE die Verbindung zur Hostdatenbank wiederherstellen. Nach Ausführung des Befehls versucht Visual FoxPro, die Hostdatenbank mit den in der Ansicht gespeicherten Informationen zur Datenquelle zu finden. Besteht die Verbindung zur Datenbank, können Sie mit TABLEUPATE( ) die in den Offlinedaten gespeicherten Aktualisierungen verarbeiten.

Um sicherzustellen, dass die Verbindungsinformationen, unabhängig vom Speicherort der Host- oder Ansichtstabellen, richtig sind, müssen Sie die Syntax für Verbindungszeichenfolgen anstelle einer benannten Verbindung verwenden.

Batchaktualisierungen für Datensätze in lokalen Tabellen

Für Batchaktualisierungen in lokalen Tabellen sollten Sie manuelle Transaktionen verwenden. Hierbei können die gesamten Batchaktualisierungen in einer einzigen Transaktion statt in einer Reihe von separaten Transaktionen durchgeführt werden.

Aktualisieren lokaler Tabellen mit Offlineansichten

Code Kommentar
USE myofflineview ONLINE EXCLUSIVE
Wiederverbinden mit dem Host und Öffnen der Ansicht
BEGIN TRANSACTION
IF TABLEUPDATE (2, .F., "myofflineview")
   END TRANSACTION
ELSE
   MESSAGEBOX("Error Occurred: Update unsuccessful.")
   ROLLBACK
ENDIF
Überprüfen auf Aktualisierungskonflikte und ggf. Aktualisieren

Batchaktualisierungen für Datensätze in Remotetabellen

Verwenden Sie für Batchaktualisierungen in Remotetabellen manuelle Transaktionen. Beginnen Sie mit TABLEUPDATE( ), und beenden Sie die Verarbeitung mit SQLCOMMIT( ) oder SQLROLLBACK( ).

Zum Aufbau der Verbindung für das manuelle Durchführen der Transaktionen müssen Sie CURSORGETPROP( ) für den Ansichtscursor verwenden, um die Verbindungskennung zu erhalten. Setzen Sie anschließend die Transactions-Eigenschaft auf den manuellen Modus.

Im folgenden Code ist die aktuelle Verbindungskennung für die Ansicht myview in hConn1 gespeichert. hConn1 wird verwendet, um die Transactions-Eigenschaft auf den Wert 2 für manuelle Transaktionen zu setzen.

hConn1 = CURSORGETPROP("CONNECTHANDLE","myview") ;
SQLSETPROP(hConn1,"TRANSACTIONS",2)

Nachdem die Verbindung für die Aktualisierungen eingerichtet ist, können Sie mit TABLEUPDATE( ) Ihre Transaktionen verarbeiten.

Befinden sich die Hosttabellen auf einem Remoteserver (z. B. SQL-Server), können Sie den folgenden Code als Richtlinie verwenden.

Aktualisieren von Remotetabellen mit Offlineansichten

Code Kommentar
USE myofflineview ONLINE EXCLUSIVE
Wiederverbinden mit dem Host und Öffnen der Ansicht
SQLSetProp(liviewhandle,"transactions",2)
SQLSetProp(custviewhandle,"transactions",2)
SQLSetProp(ordviewhandle,"transactions",2) 
Einrichten der Verbindungen für die Ansichten zum manuellen Verarbeiten der Transaktionen
IF NOT TABLEUPDATE(.T.,.F.,"lineitemsview")
   =SQLROLLBACK(ordviewhandle)
   =MESSAGEBOX("Can't update line items table")
   IF NOT TableUpdate(.T.,.F.,"ordersview")
      =SQLROLLBACK(liviewhandle)
      =MESSAGEBOX("unable to update the orders table")
      IF NOT TABLEUPDATE(.T.,.F.,"customerview")
         =SQLROLLBACK(custviewhandle)
         =MESSAGEBOX("Can't update customer table")
      Else *# check out failure scenarios
         IF NOT SQLCOMMIT(liviewhandle)
            =SQLROLLBACK(liviewhandle)
            IF NOT SQLCOMMIT(ordviewhandle)  
               =SQLROLLBACK(ordviewhandle)
               IF NOT SQLCOMMIT(custviewhandle)
                  =SQLROLLBACK(custviewhandle)
               ENDIF
            ENDIF
         ENDIF
      ENDIF
   ENDIF
ENDIF
Behandeln von Aktualisierungen und Aktualisierungskonflikten

Aktualisieren eines Datensatzes

Wenn Sie nur eine Zeile aktualisieren, können Sie automatische Transaktionen dazu verwenden. Da jede Anweisung zum Verarbeiten eines Aktualisierungs-, Lösch- oder Einfügevorgangs als separate Transaktion behandelt wird, ist ein Zurücksetzen vorheriger Transaktionsanweisungen nicht möglich.

USE customerview ONLINE EXCLUSIVE
GO TO 3
   IF TABLEUPDATE (0, .F. workarea)
      * conflict handling code
   ENDIF

Tipp   Verwenden Sie zum Aktualisieren eines einzelnen Datensatzes in einer lokalen Tabelle die GETNEXTMODIFIED( )-Funktion.

Abbrechen von Offlineaktualisierungen

Sollten Sie sich entscheiden, die Offlinedaten zu löschen und die Ansicht wieder in eine Onlineansicht umzuwandeln, können Sie dazu die DROPOFFLINE( )-Funktion verwenden.

So brechen Sie Offlineaktualisierungen ab

  • Verwenden Sie die DROPOFFLINE( )-Funktion mit dem Namen der Ansicht.

Überprüfen Sie die Rückgabewerte. Wahr (.T.) gibt an, dass der Befehl erfolgreich ausgeführt wurde, während Falsch (.F.) angibt, dass die Ansicht vor Erteilung des Befehls nicht geschlossen wurde.

Der folgende Code löscht alle Änderungen, die an der Datenuntermenge in myview vorgenommen wurden. Die Ansicht bleibt Bestandteil der Datenbank; die aktuelle Datenmenge der Ansicht wird jedoch gelöscht.

DROPOFFLINE("myview")

Sie können Offlinedatensätze löschen, jedoch nicht die Befehle PACK, ZAP oder INSERT für eine Offlineansicht verwenden.

Siehe auch

Optimieren der Leistungsfähigkeit von Ansichten | Erstellen von Abfragen | Einstellen der maximalen Anzahl von zu ladenden Datensätzen | USE | TABLEUPATE( ) | SQLCOMMIT( )