以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  用OpenQQ同步数据问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=185677)

--  作者:drcqh
--  发布时间:2023/3/9 16:28:00
--  用OpenQQ同步数据问题
请教老师:我想通过如下代码实现客户端数据表的同步,但执行时没有实现同步,代码如下:

Open客户端的receivedMessage事件中的代码如下:
Dim msg As String = e.Message
If msg.StartsWith("U#") Then \'表示修改了某行
    Dim pts() As String = msg.Split("#")
    If pts.Length = 3 Then
        Dim dr As DataRow = DataTables(pts(1)).Find("[_Identify] = " & pts(2))
        If dr IsNot Nothing  Then
            dr.Load() \'重新加载此行
        End If
    End If
ElseIf msg.StartsWith("A#") Then \'表示增加了行
    Dim pts() As String = msg.Split("#")
    If pts.Length = 3 Then
        DataTables(pts(1)).AppendLoad("[_Identify] = " &  pts(2)) \'追载新增加的行.
    End If
ElseIf msg.StartsWith("D#") Then \'表示删除了行
    Dim pts() As String = msg.Split("#")
    If pts.Length = 3 Then
        DataTables(pts(1)).RemoveFor("[_Identify] = "  & pts(2)) \'移除行
    End If
End If



客户端项目的全局表事件AfterSaveDataRow中写入如下代码:
Dim p, msg As String
If e.StatementType = 0 Then   \'新增行时
    p = "A#"
ElseIf e.StatementType = 1 Then   \'修改行时
    P = "U#"
    Else    \'删除行时 
    p = "D#"
End If
msg = p & e.DataTable.Name & "#" & e.DataRow("_identify")
For Each bd As qqbuddy In QQClient.Buddies
    If bd.OnLine Then
        QQClient.Send(bd.Name, msg)
    End If
Next

这个表事件不能实现同步吗

--  作者:有点蓝
--  发布时间:2023/3/9 16:58:00
--  
调试

Dim msg As String = e.Message
msgbox(msg) ‘这里能不能弹出,弹出什么内容?
If msg.StartsWith("U#") Then \'表示修改了某行
    Dim pts() As String = msg.Split("#")
……

--  作者:drcqh
--  发布时间:2023/3/10 10:01:00
--  
弹不出
--  作者:有点蓝
--  发布时间:2023/3/10 10:17:00
--  
说明用户没有收到消息,应该是没有登录openqq。
--  作者:drcqh
--  发布时间:2023/3/10 23:56:00
--  
测试发现在全局表事件AfterSaveDataRow中写入message.show("aaa")没反应,而在表事件AfterSaveDataRow中写入message.show("aaa")才起作用。一楼我的代码不起作用是不是这个原因呀
[此贴子已经被作者于2023/3/10 23:56:32编辑过]

--  作者:有点蓝
--  发布时间:2023/3/11 8:36:00
--  
全局表事件要开启才能使用:http://www.foxtable.com/webhelp/topics/0671.htm