Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » UltraLite - C- und C++-Programmierung » Anwendungsentwicklung » Anwendungen mit Embedded SQL entwickeln » Anwendungen eine Synchronisationsfunktion hinzufügen » Synchronisation überwachen und abbrechen

 

Informationen über den Synchronisationsstatus verarbeiten

Die Callback-Funktion, mit der Sie die Synchronisation überwachen, verwendet die Struktur ul_synch_status als Parameter. Weitere Hinweise finden Sie unter ul_synch_status-Struktur.

Die Struktur ul_synch_status hat folgende Mitglieder:

struct ul_synch_status {
    struct {
       ul_u_long   bytes;
       ul_u_long   inserts;
       ul_u_long   updates;
       ul_u_long   deletes;
     }               sent;
    struct {
       ul_u_long   bytes;
       ul_u_long   inserts;
       ul_u_long   updates;
       ul_u_long   deletes;
     }               received;
    p_ul_synch_info  info;
    ul_synch_state   state;
    ul_u_short       db_tableCount;
    ul_u_short       table_id;
    char             table_name[];
    ul_wchar         table_name_w2[];
    ul_u_short       sync_table_count;
    ul_u_short       sync_table_index;
    ul_sync_state    state;
    ul_bool          stop;
    ul_u_short       flags;
    ul_void *        user_data;
    SQLCA *          sqlca;
}
  • sent.inserts   Die Anzahl der bisher eingefügten heraufgeladenen Zeilen.

  • sent.updates   Die Anzahl der bisher aktualisierten heraufgeladenen Zeilen.

  • sent.deletes   Die Anzahl der bisher gelöschten heraufgeladenen Zeilen.

  • sent.bytes   Die Anzahl der Byte, die bisher heraufgeladen wurden.

  • received.inserts   Die Anzahl der bisher eingefügten heruntergeladenen Zeilen.

  • received.updates   Die Anzahl der bisher aktualisierten heruntergeladenen Zeilen.

  • received.deletes   Die Anzahl der bis dahin gelöschten heruntergeladenen Zeilen.

  • received.bytes   Die Anzahl der Bytes, die bisher heruntergeladen wurden.

  • info   Ein Zeiger auf die Struktur ul_synch_info Weitere Hinweise finden Sie unter ul_synch_info_a-Struktur.

  • db_tableCount   Gibt die Anzahl der Tabellen in der Datenbank zurück.

  • table_id   Die aktuelle Tabellennummer (in Bezug auf 1) der im Upload oder Download begriffenen Tabelle. Bei dieser Nummer werden Werte übersprungen, wenn nicht alle Tabellen synchronisiert werden. Außerdem wird diese Nummer nicht unbedingt hochgezählt.

  • table_name[]   Der Name der aktuellen Tabelle.

  • table_name_w2[]   Der Name der aktuellen Tabelle (Version mit breiten Zeichen). Dieses Feld wird nur unter Windows (PC und Mobile) gefüllt.

  • sync_table_count   Gibt die Anzahl der Tabellen an, die synchronisiert werden.

  • sync_table_index   Die Nummer der Tabelle im Upload oder Download, beginnend mit 1 und endend mit dem sync_table_count-Wert. Bei dieser Nummer werden Werte übersprungen, wenn nicht alle Tabellen synchronisiert werden.

  • state   Einer der folgenden Statuswerte:

    • UL_SYNCH_STATE_STARTING   Es wurden noch keine Synchronisationsaktionen unternommen.

    • UL_SYNCH_STATE_CONNECTING   Der Synchronisationsdatenstrom wurde erstellt, aber noch nicht geöffnet.

    • UL_SYNCH_STATE_SENDING_HEADER   Der Synchronisationsdatenstrom wurde geöffnet und der Header wird demnächst gesendet.

    • UL_SYNCH_STATE_SENDING_TABLE   Es wird gerade eine Tabelle gesendet.

    • UL_SYNCH_STATE_SENDING_DATA   Schemainformationen oder Daten werden gesendet.

    • UL_SYNCH_STATE_FINISHING_UPLOAD   Die Upload-Phase ist beendet und eine Festschreibung wird ausgeführt.

    • UL_SYNCH_STATE_RECEIVING_UPLOAD_ACK   Es wird gerade eine Bestätigung darüber empfangen, dass der Sendevorgang abgeschlossen wurde.

    • UL_SYNCH_STATE_RECEIVING_TABLE   Es wird gerade eine Tabelle empfangen.

    • UL_SYNCH_STATE_RECEIVING_DATA   Schemainformationen oder Daten werden empfangen.

    • UL_SYNCH_STATE_COMMITING_DOWNLOAD   Die Download-Phase ist beendet und eine Festschreibung wird ausgeführt.

    • UL_SYNCH_STATE_SENDING_DOWNLOAD_ACK   Es wird gerade eine Bestätigung gesendet, dass der Empfangsvorgang abgeschlossen wurde.

    • UL_SYNCH_STATE_DISCONNECTING   Der Synchronisationsdatenstrom wird demnächst geschlossen.

    • UL_SYNCH_STATE_DONE   Die Synchronisation wurde erfolgreich abgeschlossen.

    • UL_SYNCH_STATE_ERROR   Die Synchronisation wurde abgeschlossen, jedoch mit einem Fehler.

    • UL_SYNCH_STATE_ROLLING_BACK_DOWNLOAD   Ein Fehler ist beim Download aufgetreten und der Download wird zurückgesetzt.

      Weitere Hinweise zum Synchronisationsvorgang finden Sie unter Der Synchronisationsprozess.

  • stop   Setzen Sie dieses Mitglied auf TRUE, um die Synchronisation zu unterbrechen. Die SQL-Ausnahmebedingung SQLE_INTERRUPTED wird gesetzt, und die Synchronisation wird gestoppt, als ob ein Kommunikationsfehler aufgetreten wäre. Der Beobachter wird immer entweder mit dem Zustand DONE oder ERROR aufgerufen, sodass er richtig aufräumen kann.

  • flags   Gibt die aktuellen Optionen für die Synchronisation zurück, die weitere Informationen über den aktuellen Status liefern.

  • user_data   Gibt das Benutzerdatenobjekt zurück, das als Argument an die Funktion ULRegisterSynchronizationCallback übergeben wird.

  • sqlca   Zeiger auf den aktiven SQLCA-Bereich der Verbindung

Beispiel

Der folgende Codeausschnitt zeigt eine sehr einfache Beobachtungsfunktion:

extern void __stdcall ObserverFunc(
    p_ul_synch_status status )
{
    switch( status->state ) {
        case UL_SYNCH_STATE_STARTING:
        printf( "Starting\n");
        break;
        case UL_SYNCH_STATE_CONNECTING:
            printf( "Connecting\n"  );
            break;
        case UL_SYNCH_STATE_SENDING_HEADER:
            printf( "Sending Header\n" );
            break;
        case UL_SYNCH_STATE_SENDING_TABLE:
            printf( "Sending Table %d of %d\n",
                    status->tableIndex + 1,
                    status->tableCount );
            break;
        case UL_SYNCH_RECEIVING_UPLOAD_ACK:
            printf( "Receiving Upload Ack\n" );
            break;
        case UL_SYNCH_STATE_RECEIVING_TABLE:
            printf( "Receiving Table %d of %d\n",
                    status->tableIndex + 1,
                    status->tableCount );
            break;
        case UL_SYNCH_STATE_SENDING_DOWNLOAD_ACK:
            printf( "Sending Download Ack\n" );
            break;
        case UL_SYNCH_STATE_DISCONNECTING:
            printf( "Disconnecting\n" );
            break;
        case UL_SYNCH_STATE_DONE:
            printf( "Done\n" );
            break;
        break;
...

Dieser Beobachter erzeugt bei der Synchronisation von zwei Tabellen folgende Ausgabe:

Starting
Connecting
Sending Header
Sending Table 1 of 2
Sending Table 2 of 2
Receiving Upload Ack
Receiving Table 1 of 2
Receiving Table 2 of 2
Sending Download Ack
Disconnecting
Done
CustDB-Beispiel

Die Beispielanwendung CustDB enthält ein Beispiel einer Beobachtungsfunktion. Die Implementierung in CustDB umfasst ein Fenster, das den Verarbeitungsfortschritt der Synchronisation anzeigt und dem Benutzer gestattet, die Synchronisation abzubrechen. Durch die Komponente für die Benutzeroberfläche wird die Beobachtungsfunktion plattformspezifisch.

Der CustDB-Beispielcode befindet sich im Verzeichnis Beispielverzeichnis\UltraLite\CustBD. Die Beobachtungsfunktion befindet sich in den plattformspezifischen Unterverzeichnissen des CustDB-Verzeichnisses.