不知道代码哪有问题 但是放在计划管理中不对
刷新同步 这里有 你可以在看看
用OpenQQ即时高效同步数据
在多用户协同工作的情况下,如果某用户修改数据后保存,其他用户只有重新加载才能看到最新的数据,参考:数据同步
实际上大多数程序,都是这种被动刷新的方式,例如你在使用网银的时候,只有刷新页面,才能看到刚刚发生的交易;在论坛浏览帖子的时候,只有刷新页面,才能看到他人刚发表的帖子。
也有一些程序,是定时刷新,不管数据有没有变动,到了一定时间,都重新加载数据。
但是上述方式,都没有办法做到即时同步,而且这些方式并非只刷新已经变动的数据,而是重新加载整个页面、甚至整个表,大大增加了服务器的负担,既不即时,也不高效。
有了OpenQQ,我们可以保存某行数据后,通知其他好友,这一行的数据有变化,请重新加载,这样就能做到即时、高效了。
设计步骤:
1、在编辑窗口加一个保存按钮,按钮代码设置为:
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
这段代码用于合成通知信息发送给好友,例如"U#表A#8"表A主键为8的行发生了修改,"A#表A#10"表示表A新增了1行,新增行的主键为10。
你可以任意定义这种格式的通知。
下面是同步
2、在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
End If