以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助。刷新同步  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=80524)

--  作者:manyifuwu
--  发布时间:2016/1/25 14:45:00
--  求助。刷新同步

我把这个代码,放在计划管理。

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

但提示出错。请问错在那???


--  作者:manyifuwu
--  发布时间:2016/1/25 14:45:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看

--  作者:blsu33
--  发布时间:2016/1/25 14:56:00
--  
不知道代码哪有问题 但是放在计划管理中不对 
刷新同步 这里有 你可以在看看

用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


--  作者:manyifuwu
--  发布时间:2016/1/25 15:12:00
--  

谢谢。!

请问是否可以不用保存按钮,自动保存实现保存按钮功能?


--  作者:manyifuwu
--  发布时间:2016/1/25 15:30:00
--  

请问是否可以不用保存按钮,自动保存实现保存按钮功能?


--  作者:blsu33
--  发布时间:2016/1/25 15:37:00
--  
If Tables("表B").Rows.Count>0 Then’表不能为空,是否为这个?
Dim r As Row = Tables("派工").Current
Dim p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "U#")

--  作者:Hyphen
--  发布时间:2016/1/25 15:45:00
--  
自动保存 不可控,因为选择的未必是要保存发送的行。

可以考虑放到BeforeSaveDataRow、AfterSelChange等事件中


Dim r As Row = Tables("派工").Current

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

end if