Foxtable(狐表)用户栏目专家坐堂 → 关于即时同步的问题


  共有2204人关注过本帖树形打印复制链接

主题:关于即时同步的问题

帅哥哟,离线,有人找我吗?
ye8573
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:117 积分:940 威望:0 精华:0 注册:2017/1/12 16:26:00
关于即时同步的问题  发帖心情 Post By:2018/6/7 12:49:00 [只看该作者]

关于利用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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/7 14:46:00 [只看该作者]

给各个客户端发送【刷新某表】的信息,可以合成字符,如 "刷新|表A"

 

客户端接收到后,拆分数据,如果是【刷新】开头的,就执行代码 DataTables("表A").Load


 回到顶部
帅哥哟,离线,有人找我吗?
ye8573
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:117 积分:940 威望:0 精华:0 注册:2017/1/12 16:26:00
  发帖心情 Post By:2018/6/8 7:50:00 [只看该作者]

这个刷新|表A,表A能不能是我按保存按钮时的当前表?我现在试了下,固定表名称的话可以成功,所有表都用同一个按钮的话不行。
想要达到的效果是,在当前表按保存,生成信息“刷新|当前表名称”发送,其他客户端收到后自动刷新那张表。请版主大大赐教

 回到顶部
帅哥哟,离线,有人找我吗?
ye8573
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:117 积分:940 威望:0 精华:0 注册:2017/1/12 16:26:00
  发帖心情 Post By:2018/6/8 8:44:00 [只看该作者]

请版主帮帮忙,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/8 9:07:00 [只看该作者]

以下是引用ye8573在2018/6/8 7:50:00的发言:
这个刷新|表A,表A能不能是我按保存按钮时的当前表?我现在试了下,固定表名称的话可以成功,所有表都用同一个按钮的话不行。
想要达到的效果是,在当前表按保存,生成信息“刷新|当前表名称”发送,其他客户端收到后自动刷新那张表。请版主大大赐教

 

比如代码

 

Dim str As String = "刷新|" & currentTable.DataTable.name

 

然后发送str过去

 

接收后,拆分str,如

 

Dim ary() = e.message.split("|")

DataTables(ary(1)).Load


 回到顶部
帅哥哟,离线,有人找我吗?
ye8573
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:117 积分:940 威望:0 精华:0 注册:2017/1/12 16:26:00
  发帖心情 Post By:2018/6/8 12:37:00 [只看该作者]

版主,这样写代码的话发现会影响其他客户端的操作,比如其他客户端在当前表筛选了部分数据,我这点完保存,那边筛选的数据就没了,跳回了未筛选前的状态。以前即时同步的时候是每行单独同步。是否可以让表在刷新的同时又不影响其他客户端操作的?如果不行的话是否可以修改帮助文件中即时同步的代码,做成一个循环,点一下就把所有新增修改或删除过的行依次保存一遍?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/8 12:40:00 [只看该作者]

那你就循环每一行处理,如

 

For Each r As Row In Tables("表A").rows
    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
Next


 回到顶部
帅哥哟,离线,有人找我吗?
ye8573
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:117 积分:940 威望:0 精华:0 注册:2017/1/12 16:26:00
  发帖心情 Post By:2018/6/8 18:37:00 [只看该作者]

版主,保存的效果做好了,在做删除的时候出现了奇怪的情况,选中需要删除的行以后点击按钮,结果删掉的不是我选中的行,而且一下就删好几条,有时6条,有时3条,有时2条,请问是不是我代码里哪里写错了?
代码如下:
Dim n As String = CurrentTable.name
For Each r As Row In Tables(n).rows
Dim msg As String = "D#" & n & "#" & r("_Identify")
r.Delete()
Tables(n).Save()
For Each bd As QQBuddy In QQClient.Buddies
    If bd.Online Then
        QQClient.Send(bd.name, msg)
    End If
Next
Next
[此贴子已经被作者于2018/6/8 18:37:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/8 19:51:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
ye8573
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:117 积分:940 威望:0 精华:0 注册:2017/1/12 16:26:00
  发帖心情 Post By:2018/6/12 8:12:00 [只看该作者]

版主大大,请帮我看看我的代码哪里有问题,点击保存按钮后其他客户端会报错

按钮事件代码

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

QQ客户端receivedmessage事件代码

Dim msg As String = e.Message
If msg.StartsWith("U#") Then '表示修改了某行
    Dim pts() As String = msg.Split("#")
    If pts.Length = 3 Then
        Dim dr2 As DataRow = Tables(pts(1)).DataTable.Find("[_Identify] = " & pts(2))
        If dr2 IsNot Nothing  Then
            dr2.Load() '重新加载此行
        End If
    End If
ElseIf msg.StartsWith("A#") Then '表示增加了行
    Dim pts() As String = msg.Split("#")
    If pts.Length = 3 Then
         Tables(pts(1)).DataTable.AppendLoad("[_Identify] = " &  pts(2)) '追载新增加的行.
    End If
ElseIf msg.StartsWith("D#") Then '表示删除了行
    Dim pts() As String = msg.Split("#")
    If pts.Length = 3 Then
         Tables(pts(1)).DataTable.RemoveFor("[_Identify] = "  & pts(2)) '移除行
    End If
End If

 回到顶部
总数 12 1 2 下一页