以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于即时同步的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=120115) |
-- 作者:ye8573 -- 发布时间: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 |
-- 作者:有点甜 -- 发布时间:2018/6/7 14:46:00 -- 给各个客户端发送【刷新某表】的信息,可以合成字符,如 "刷新|表A"
客户端接收到后,拆分数据,如果是【刷新】开头的,就执行代码 DataTables("表A").Load |
-- 作者:ye8573 -- 发布时间:2018/6/8 7:50:00 -- 这个刷新|表A,表A能不能是我按保存按钮时的当前表?我现在试了下,固定表名称的话可以成功,所有表都用同一个按钮的话不行。 想要达到的效果是,在当前表按保存,生成信息“刷新|当前表名称”发送,其他客户端收到后自动刷新那张表。请版主大大赐教
|
-- 作者:ye8573 -- 发布时间:2018/6/8 8:44:00 -- 请版主帮帮忙,谢谢 |
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2018/6/8 12:37:00 -- 版主,这样写代码的话发现会影响其他客户端的操作,比如其他客户端在当前表筛选了部分数据,我这点完保存,那边筛选的数据就没了,跳回了未筛选前的状态。以前即时同步的时候是每行单独同步。是否可以让表在刷新的同时又不影响其他客户端操作的?如果不行的话是否可以修改帮助文件中即时同步的代码,做成一个循环,点一下就把所有新增修改或删除过的行依次保存一遍? |
-- 作者:有点甜 -- 发布时间:2018/6/8 12:40:00 -- 那你就循环每一行处理,如
For Each r As Row In Tables("表A").rows |
-- 作者:ye8573 -- 发布时间: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编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/6/8 19:51:00 -- 选中行,这样处理
http://www.foxtable.com/webhelp/scr/1597.htm
http://www.foxtable.com/webhelp/scr/1776.htm
|
-- 作者:ye8573 -- 发布时间: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
|