同期をモニタするコールバック関数は、ul_synch_status 構造体をパラメータとして取ります。詳細については、ul_synch_status 構造体を参照してください。
ul_synch_status 構造体には次のようなメンバが含まれます。
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 これまでにアップロードされた挿入済みローの数。
sent.updates これまでにアップロードされた更新済みローの数。
sent.deletes これまでにアップロードされた削除済みローの数。
sent.bytes これまでにアップロードされたバイト数。
received.inserts これまでにダウンロードされた挿入済みローの数。
received.updates これまでにダウンロードされた更新済みローの数。
received.deletes これまでにダウンロードされた削除済みローの数。
received.bytes これまでにダウンロードされたバイト数。
info ul_synch_info 構造体へのポインタ。ul_synch_info_a 構造体を参照してください。
db_tableCount データベース内のテーブルの数を返します。
table_id 現在アップロードまたはダウンロードされているテーブルの番号 (1 から始まります)。同期されないテーブルがある場合には、この番号で値がスキップされることがあります。また、番号が必ず増加するとはかぎりません。
table_name[] 現在のテーブルの名前。
table_name_w2[] 現在のテーブルの名前 (ワイド文字バージョン)。このフィールドには、Windows (デスクトップまたは Mobile) 環境の場合のみ値が入ります。
sync_table_count 同期中のテーブルの数を返します。
sync_table_index アップロードまたはダウンロードされているテーブルの番号。1 から始まり sync_table_count の値で終わります。同期されていないテーブルがある場合には、この番号で値がスキップされることがあります。
state 以下のステータスのいずれかを表します。
UL_SYNCH_STATE_STARTING 同期処理はまだ行われていません。
UL_SYNCH_STATE_CONNECTING 同期ストリームは構築されていますが、まだ開かれていません。
UL_SYNCH_STATE_SENDING_HEADER 同期ストリームが開かれ、ヘッダが送信されようとしています。
UL_SYNCH_STATE_SENDING_TABLE テーブルが送信されています。
UL_SYNCH_STATE_SENDING_DATA スキーマ情報またはデータが送信されています。
UL_SYNCH_STATE_FINISHING_UPLOAD アップロード処理が完了し、コミットが実行されています。
UL_SYNCH_STATE_RECEIVING_UPLOAD_ACK アップロード完了の確認を受信しています。
UL_SYNCH_STATE_RECEIVING_TABLE テーブルを受信しています。
UL_SYNCH_STATE_RECEIVING_DATA スキーマ情報またはデータを受信しています。
UL_SYNCH_STATE_COMMITTING_DOWNLOAD ダウンロード処理が完了し、コミットが実行されています。
UL_SYNCH_STATE_SENDING_DOWNLOAD_ACK ダウンロード完了の確認が送信されています。
UL_SYNCH_STATE_DISCONNECTING 同期ストリームが閉じられようとしています。
UL_SYNCH_STATE_DONE 同期は正常に完了しました。
UL_SYNCH_STATE_ERROR 同期は完了しましたが、エラーが発生しました。
UL_SYNCH_STATE_ROLLING_BACK_DOWNLOAD ダウンロード中にエラーが発生し、ダウンロードがロールバックされています。
同期処理の詳細については、同期処理を参照してください。
stop 同期を中断するには、このメンバを true に設定します。SQL 例外の SQLE_INTERRUPTED が設定され、通信エラーが発生したかのように同期が停止します。observer は、適切なクリーンアップを実行するように、常に DONE または ERROR のステータスで呼び出されます。
flags 現在の状態に関連する追加情報を示す、現在の同期フラグを返します。
user_data 引数として ULRegisterSynchronizationCallback 関数に渡されるユーザ・データ・オブジェクトを返します。
sqlca 接続のアクティブな SQLCA へのポインタ。
次の例は、ごく簡単な observer 関数を示しています。
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; ... |
この observer 関数では、2 つのテーブルが同期されたときに次のような出力が生成されます。
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 |
observer 関数の例は CustDB サンプル・アプリケーションに含まれています。CustDB を使った実装では、同期の進捗状況を示すウィンドウが表示されます。ユーザはそのウィンドウで同期をキャンセルすることができます。ユーザ・インタフェース・コンポーネントは observer 関数のプラットフォームを指定します。
CustDB サンプル・コードは samples-dir\UltraLite\CustDB ディレクトリにあります。observer 関数は CustDB ディレクトリのプラットフォーム固有のサブディレクトリに含まれています。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |