Dieser Abschnitt zeigt die wichtigsten Schritte bei der Verwendung der DBTools-Schnittstelle für dbmlsync.
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.
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" |
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
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 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"; |
Weitere Hinweise zu Datenbank-Verbindungsparametern finden Sie unter dbmlsync-Option -c.
Legen Sie andere a_sync_db-Felder fest, um die Synchronisation anzupassen.
Die meisten Felder entsprechen dbmlsync-Befehlszeilenoptionen. Weitere Hinweise dazu, welche Felder welchen Befehszeilenoptionen entsprechen, finden Sie in dbtools.h.
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; |
Weitere Hinweise zu a_sync_db-Feldern finden Sie unter a_sync_db-Struktur [Datenbanktools].
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.
Weitere Hinweise zu DBTools-Callback-Funktionen finden Sie unter Callback-Funktionen.
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; } |
Eine typische Sequenz von Aufrufen an diese Callback-Funktion wird unten gezeigt.
// 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; |
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.
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.
Fahren Sie die DBTools-Schnittstelle herunter.
Die DBToolsFini-Funktion setzt DBTools-Ressourcen frei.
DBToolsFini( &info ); |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |