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

SQL Anywhere 11.0.1 (中文) » UltraLite - C 及 C++ 编程 » 应用程序开发 » 使用嵌入式 SQL 开发应用程序 » 向应用程序添加同步 » 监控和取消同步

 

处理同步状态信息

监控同步的回调函数将 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,且同步已经停止,就像发生了通信错误一样。观察器被调用时始终 处于 DONE 或 ERROR 状态,以便它可以进行正确的清除。

  • flags   返回指示有关当前状态的其它信息的当前同步标志。

  • user_data   返回作为 ULRegisterSynchronizationCallback 函数的参数而传递的用户数据对象。

  • sqlca   指向连接的活动 SQLCA 的指针。

示例

以下代码说明了一个非常简单的观察器函数:

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;
...

当同步两个表时,此观察器产生以下输出:

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 示例

CustDB 示例应用程序中包括一个观察器函数的示例。CustDB 中的该观察器函数提供一个窗口,该窗口显示同步进度,并允许用户取消同步。用户界面组件使该观察器函数成为特定于平台的观察器函数。

CustDB 示例代码位于 samples-dir\UltraLite\CustDB 目录中。观察器函数位于 CustDB 目录的特定于平台的子目录中。