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

SAP Sybase SQL Anywhere 16.0 (Deutsch) » MobiLink - Clientadministration » SQL Anywhere-Clients für MobiLink » DBTools-Schnittstelle für dbmlsync

 

DBTools-Schnittstelle für dbmlsync einrichten

Dieser Abschnitt enthält die wichtigsten Schritte zum Konfigurieren und Starten von dbmlsync unter Verwendung der DBTools-Schnittstelle in C oder C++.

Voraussetzungen

Es gibt keine Voraussetzungen für diese Aufgabe.

Kontext und Bemerkungen

Weitere Hinweise zur DBTools-Blíbliothek finden Sie unter Datenbanktools-Schnittstelle (DBTools).

Weitere Hinweise zur Verwendung von Importbibliotheken für Ihre Entwicklungsumgebung finden Sie unter DBTools-Importbibliotheken.

 Aufgabe
  1. Beziehen Sie die DBTools-Headerdatei ein.

    Die DBTools-Headerdatei dbtools.h listet die Eintrittspunkte zur DBTools-Bibliothek auf und definiert die erforderlichen Datentypen.

    #include "dbtools.h"
  2. Starten Sie die DBTools-Schnittstelle.

    • Deklarieren und initialisieren Sie die a_dbtools_info-Struktur.

      a_dbtools_info   info;
      short ret;
      ...
      // clear a_dbtools_info fields
      memset( &info, 0, sizeof( info ) ); 
      info.errorrtn = dbsyncErrorCallBack;

      Die dbsyncErrorCallBack-Funktion handhabt Fehlermeldungen und wird in Schritt 4 dieses Verfahrens beschrieben.

    • Verwenden Sie die DBToolsInit-Funktion, um DBTools zu initialisieren.

      ret = DBToolsInit( &info );
      if( ret != 0 ) {
       printf("dbtools initialization failure \n");
      }

      Weitere Hinweise zur DBTools-Initialisierung finden Sie unter

  3. Initialisieren Sie die a_sync_db-Struktur.

    • Deklarieren Sie eine a_sync_db-Instanz. Beispiel: Deklarieren Sie eine Instanz namens dbsync_info:

      a_sync_db dbsync_info;
    • Löschen Sie die a_sync_db-Strukturfelder.

      memset( &dbsync_info, 0, sizeof( dbsync_info ) );
    • Legen Sie die erforderlichen a_sync_db-Felder fest.

      dbsync_info.version = DB_TOOLS_VERSION_NUMBER;
      dbsync_info.output_to_mobile_link = 1;
      dbsync_info.default_window_title 
        = "dbmlsync dbtools sample";
    • Legen Sie die Datenbank-Verbindungszeichenfolge fest.

      dbsync_info.connectparms = "UID=DBA;PWD=sql";
    • Legen Sie die anderen a_sync_db-Felder fest, um die Synchronisation anzupassen.

      Die meisten Felder entsprechen dbmlsync-Befehlszeilenoptionen.

      Im unten stehenden Beispiel ist "Vorgang ausführlich darstellen" aktiviert.

      dbsync_info.verbose_upload = 1;
      dbsync_info.verbose_option_info = 1;
      dbsync_info.verbose_row_data = 1;
      dbsync_info.verbose_row_cnts = 1;
  4. Erstellen Sie Callback-Funktionen, um während der Synchronisation Rückmeldungen zu erhalten, und ordnen Sie diese Funktionen den entsprechenden a_sync_db-Feldern zu.

    Die folgenden Funktionen verwenden den Standard-Ausgebedatenstrom, um dbmlsync-Fehler-, Log- und Fortschrittsinformationen anzuzeigen.

    • Beispiel: Erstellen Sie eine Funktion namens dbsyncErrorCallBack, um generierte Fehlermeldungen zu verarbeiten:

      extern short _callback dbsyncErrorCallBack( char *str )
      {
          if( str != NULL ) {
              printf( "Error Msg    %s\n", str );
          }
          return 0;
      }
    • Beispiel: Erstellen Sie eine Funktion namens dbsyncWarningCallBack, um generierte Warnmeldungen zu verarbeiten:

      extern short _callback dbsyncWarningCallBack( char *str )
      {
          if( str != NULL ) {
              printf( "Warning Msg  %s\n", str );
          }
          return 0;
      }
    • Beispiel: Erstellen Sie eine Funktion namens dbsyncLogCallBack, um ausführliche Informationsmeldungen zu erhalten, die Sie in einer Datei protokollieren, anstatt sie in einem Fenster anzuzeigen:

      extern short _callback dbsyncLogCallBack( char *str )
      {
          if( str != NULL ) {
              printf( "Log Msg      %s\n", str );
          }
          return 0;
      }
    • Beispiel: Erstellen Sie eine Funktion namens dbsyncMsgCallBack, um Informationsmeldungen zu erhalten, die während der Synchronisation generiert werden.

      extern short _callback dbsyncMsgCallBack( char *str )
      {
          if( str != NULL ) {
              printf( "Display Msg  %s\n", str );
          }
          return 0;
      }
    • Beispiel: Erstellen Sie eine Funktion namens dbsyncProgressMessageCallBack, um den Fortschrittstext zu erhalten. Im dbmlsync-Dienstprogramm wird dieser Text direkt über dem Fortschrittsbalken angezeigt.

      extern short _callback dbsyncProgressMessageCallBack(
       char *str )
      {
          if( str != NULL ) {
              printf( "ProgressText %s\n", str );
          }
          return 0;
      }
    • Beispiel: Erstellen Sie eine Funktion namens dbsyncProgressIndexCallBack, um Informationen zum Aktualisieren einer Fortschrittsanzeige oder eines Fortschrittsbalkens zu erhalten. Diese Funktion erhält zwei Parameter:

      • index   Eine Ganzzahl, die den aktuellen Stand des Fortschritts einer Synchronisation angibt

      • max   Der maximale Fortschrittswert. Wenn dieser Wert Null ist, hat sich der maximale Wert nicht verändert, seitdem das Ereignis zuletzt ausgelöst wurde.

      extern short _callback dbsyncProgressIndexCallBack
      (a_sql_uint32 index, a_sql_uint32 max )
      {
          printf( "ProgressIndex    Index %d Max: %d\n",
               index, max );
          return 0;
      }

      Im Folgenden finden Sie eine typische Sequenz von Aufrufen an diese Callback-Funktion:

      // example calling sequence
      dbsyncProgressIndexCallBack( 0, 100 );
      dbsyncProgressIndexCallBack( 25, 0 );
      dbsyncProgressIndexCallBack( 50, 0 );
      dbsyncProgressIndexCallBack( 75, 0 );
      dbsyncProgressIndexCallBack( 100, 0 );

      Diese Sequenz sollte dazu führen, dass der Fortschrittsbalken mit 0%, 25%, 50%, 75% und 100% dargestellt wird.

    • Beispiel: Erstellen Sie eine Funktion namens dbsyncWindowTitleCallBack, um Statusinformationen zu erhalten. Im Dienstprogramm dbmlsync werden diese Informationen in der Titelleiste angezeigt.

      extern short _callback dbsyncWindowTitleCallBack(
       char *title )
      {
          printf( "Window Title     %s\n", title );
          return 0;
      }
    • Die dbsyncMsgQueueCallBack-Funktion wird aufgerufen, wenn eine Verzögerung oder ein Ruhezustand erforderlich ist. Sie muss einen der folgenden Werte zurückgeben, die in dllapi.h definiert sind.

      • MSGQ_SLEEP_THROUGH   Zeigt an, dass die Routine über die angeforderte Anzahl von Millisekunden im Ruhezustand war.

      • MSGQ_SHUTDOWN_REQUESTED   Zeigt an, dass Sie die Synchronisation so schnell wie möglich beenden möchten

      • MSGQ_SYNC_REQUESTED   Zeigt an, dass die Routine für die angeforderte Anzahl von Millisekunden im Ruhezustand war und die nächste Synchronisation unmittelbar beginnen sollte, wenn derzeit keine Synchronisation durchgeführt wird.

      extern short _callback dbsyncMsgQueueCallBack(
         a_sql_uint32 sleep_period_in_milliseconds )
      {
      
       printf( "Sleep %d ms\n", sleep_period_in_milliseconds );
       Sleep( sleep_period_in_milliseconds );
       return MSGQ_SLEEP_THROUGH; 
      }
    • Ordnen Sie Callback-Funktionszeiger den entsprechenden a_sync_db-Synchronisationsstrukturfeldern zu.



      // set call back functions
      dbsync_info.errorrtn    = dbsyncErrorCallBack;
      dbsync_info.warningrtn  = dbsyncWarningCallBack;
      dbsync_info.logrtn      = dbsyncLogCallBack;
      dbsync_info.msgrtn      = dbsyncMsgCallBack;
      dbsync_info.msgqueuertn = dbsyncMsgQueueCallBack;
      dbsync_info.progress_index_rtn
           = dbsyncProgressIndexCallBack;
      dbsync_info.progress_msg_rtn
           = dbsyncProgressMessageCallBack;
      dbsync_info.set_window_title_rtn
           = dbsyncWindowTitleCallBack;
  5. Erstellen Sie eine verknüpfte Liste von a_syncpub-Strukturen, um festzulegen, welche Subskriptionen synchronisiert werden sollen.

    Jeder Knoten in der verknüpften Liste entspricht einer Instanz der Option -s in der dbmlsync-Befehlszeile.

    • Deklarieren Sie eine a_syncpub-Instanz. Beispiel: Nennen Sie sie publication_info:

      a_syncpub publication_info;
    • Initialisieren Sie a_syncpub-Felder, indem Sie angeben, welche Subskriptionen Sie synchronisieren wollen.

      Beispiel, um die Subskriptionen template_p1- und template_p2 zusammen in einer einzigen Synchronisationssitzung zu synchronisieren:

      publication_info.next = NULL; // linked list terminates
      publication_info.subscription = "template_p1,template_p2";
      publication_info.ext_opt  = "dir=c:\\logs";
      publication_info.alloced_by_dbsync = 0;
      publication_info.pub_name = NULL;

      Das entspricht der Eingabe von -s template_p1,template_p2 in der dbmlsync-Befehlszeile.

      Die Angabe von erweiterten Optionen mit dem ext_opt-Feld bietet dieselbe Funktionalität wie die Option -eu von dbmlsync.

    • Ordnen Sie die Publikationsstruktur dem upload_defs-Feld Ihrer a_sync_db-Instanz zu.

      dbsync_info.upload_defs   = &publication_info;

    Sie können eine verknüpfte Liste von a_syncpub-Strukturen erstellen. Jede a_syncpub-Instanz in der verknüpften Liste entspricht einer Spezifikation der Option -n oder -s in der dbmlsync-Befehlszeile.

  6. Führen Sie dbmlsync aus, indem Sie die DBSynchronizeLog-Funktion verwenden.

    In der folgenden Liste mit Codes enthält sync_ret_val den Rückgabewert "0" für "Erfolgreich" und "nicht-0" für "Fehlschlag".

    short sync_ret_val;
    printf("Running dbmlsync using dbtools interface...\n");
    sync_ret_val = DBSynchronizeLog(&dbsync_info); 
    printf("\n Done... synchronization return value is: %I \n", sync_ret_val);

    Sie können Schritt 6 mit denselben oder mit anderen Parameterwerten mehrfach wiederholen.

  7. Fahren Sie die DBTools-Schnittstelle herunter.

    DBToolsFini( &info );

    Die DBToolsFini-Funktion setzt DBTools-Ressourcen frei.

Ergebnisse

Dbmlsync wird konfiguriert und gestartet.

 Siehe auch