以文本方式查看主题

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

--  作者:xiaohuli
--  发布时间:2015/10/29 17:47:00
--  即时同步数据的问题
刚开始学习OpenQQ,用OpenQQ即时高效同步数据,在编辑窗口加一个保存按钮,按钮代码设置为:

Dim r As Row = Tables("A").Current
Dim
p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "U#")
r
.Save()
\'
一定要在保存后合成信息,因为新增行的主键在保存后才生成
Dim
msg As String = p & "A" & "#" & r("_Identify")
For
Each bd As QQBuddy In QQClient.Buddies
    If bd.Online Then
        QQClient.Send(bd.name, msg)
   
End If
Next

这个编辑窗口是服务端的程序上的,还是客户端的程序上加的这段代码呀,我是在客户端的编辑窗口的保存按钮上加了这段代码后,在QQClient的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

这些代码都加了,然后我在客户端的编辑窗口中新增一行,保存后,其他客户端上也没有体现呀。

有了OpenQQ,我们可以保存某行数据后,通知其他好友,这一行的数据有变化,请重新加载,这样就能做到即时、高效了。这个到底怎么实现?


--  作者:大红袍
--  发布时间:2015/10/29 17:54:00
--  

1、你把服务器QQ启动了吗?

 

2、你打开多个客户端QQ了吗?

 

3、你在ReceivedMessage事件加入msgbox,看是否接收到了信息

 

msgbox(e.Message)

 

在保存按钮,加入msgbox,看是否发送了信息

 

QQClient.Send(bd.name, msg)

msgbox("发送了")


--  作者:xiaohuli
--  发布时间:2015/10/30 10:37:00
--  

在保存按钮上弹出了msgbox,但是在QQClient的ReceivedMessage中没有弹出msgbox,服务端还需要写什么代码不?服务端qq登录了,打开了多个客户端也登录了qq。

[此贴子已经被作者于2015/10/30 10:37:30编辑过]

--  作者:大红袍
--  发布时间:2015/10/30 10:57:00
--  

1、你是在本机测试,还是在不同的计算机上测试?

 

如果是本机测试,就打开服务器QQ、打开两个客户端QQ,登陆,然后在某个客户端QQ,发送信息,就会弹出;

 

2、如果不同电脑测试。你的服务器ip不能设置成127.0.0.1啊,要指明局域网或互联网的具体ip才行


--  作者:xiaohuli
--  发布时间:2015/10/30 11:11:00
--  

客户端,服务端都是在本地测试的,我不明白的是这句话,多用户环境下,任何一个客户端做的修改、增加,删除,保存后都会立即体现在其他客户端上。

这句话的意思是当修改,增加,删除数据后,是自动体现在其他客户端上,还是qq来发送消息,通知其他好友数据已经改变?


--  作者:大红袍
--  发布时间:2015/10/30 11:33:00
--  

1、通过 QQClient.Send(bd.name, msg) 发送信息,接收到信息后,动态执行编写的代码,做什么事都可以啊。

 

2、比如删除发送信息, 删除#1024 那么,获取信息后,就知道是删除了第1024行的数据,那么对应的把此行也删除一下。


--  作者:xiaohuli
--  发布时间:2015/10/30 11:44:00
--  
问题是,当我新增一行数据保存后,保存按钮和QQClient的ReceivedMessage事件中都弹出了msgbox,但是没有通知给好友呀,没有在其他在线的好友的客户端上体现出来,数据已经修改的问题。
--  作者:大红袍
--  发布时间:2015/10/30 11:51:00
--  
弹出msgbx就行了啊,根据发送的信息,写代码啊。
--  作者:xiaohuli
--  发布时间:2015/10/30 11:54:00
--  

老师,当弹出了msgbox后,那我应该在哪里写代码呀,能不能写个小例子。


--  作者:大红袍
--  发布时间:2015/10/30 11:57:00
--  
以下是引用xiaohuli在2015/10/30 11:54:00的发言:

老师,当弹出了msgbox后,那我应该在哪里写代码呀,能不能写个小例子。

 

帮助文档就有啊,在ReceivedMessage写到任何代码啊

 

http://www.foxtable.com/help/topics/3006.htm