以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 利用openqq同步数据,如果是两个表怎么办? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=78288) |
-- 作者:zhchling -- 发布时间:2015/12/6 13:30:00 -- 利用openqq同步数据,如果是两个表怎么办? 利用openqq同步数据,如果是两个表需要同步,并且主键ID不同, 怎么办? 客户表 (ID) , 行程表 (日程ID)
帮助中的设计步骤: 1、在编辑窗口加一个保存按钮,按钮代码设置为: Dim
r As
Row = Tables("表A").Current 2、再增加一个删除按钮,按钮代码设置为: Dim
r As
Row = Tables("表A").Current 这段代码用于删除行后合成通知信息发送给好友,例如"D#表A#8"表A主键为8的行被删除了。 3、在QQClient的ReceivedMessage事件中修改代码: Dim msg
As
String =
e.Message 这样,多用户环境下,任何一个客户端做的修改、增加,删除,保存后都会立即体现在其他客户端上。 [此贴子已经被作者于2015/12/6 13:31:53编辑过]
|
-- 作者:大红袍 -- 发布时间:2015/12/6 14:25:00 -- 两个表需要同步,合成的信息不同,就是同步不同的表啊 Dim msg As String = p & "表A" & "#" & r("_Identify")
|
-- 作者:zhchling -- 发布时间:2015/12/6 14:30:00 -- 我尝试用下面的代码,就是两套代码, 貌似不行.不知道哪不对 \'利用OPENQQ 同步保存数据 \'客户表 Dim r As Row = Tables("userb").Current Dim p As String = IIF(r.DataRow.RowState = DataRowState.Added, "A#", "U#") r.Save() \'一定要在保存后合成信息,因为新增行的主键在保存后才生成 Dim msg As String = p & "userb" & "#" & r("Id") For Each bd As QQBuddy In QQClient.Buddies If bd.Online Then QQClient.Send(bd.name, msg) End If Next \'行程表 Dim r2 As Row = Tables("zclxingcheng").Current Dim p2 As String = IIF(r2.DataRow.RowState = DataRowState.Added, "A2#", "U2#") r2.Save() \'一定要在保存后合成信息,因为新增行的主键在保存后才生成 Dim msg2 As String = p2 & "zclxingcheng" & "#" & r2("日程Id") For Each bd2 As QQBuddy In QQClient.Buddies If bd2.Online Then QQClient.Send(bd2.name, msg2) End If Next 客户端的 receivedmessage \'利用openqq同步数据userb 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("[Id] = " & 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("[Id] = " & pts(2)) \'追载新增加的行. End If ElseIf msg.StartsWith("D#") Then \'表示删除了行 Dim pts() As String = msg.Split("#") If pts.Length = 3 Then DataTables(pts(1)).RemoveFor("[Id] = " & pts(2)) \'移除行 End If End If \'利用openqq同步数据zclxingcheneg Dim msg2 As String = e.Message If msg2.StartsWith("U2#") Then \'表示修改了某行 Dim pts2() As String = msg2.Split("#") If pts2.Length = 3 Then Dim dr2 As DataRow = DataTables(pts2(1)).Find("[日程Id] = " & pts2(2)) If dr2 IsNot Nothing Then dr2.Load() \'重新加载此行 End If End If ElseIf msg2.StartsWith("A2#") Then \'表示增加了行 Dim pts2() As String = msg2.Split("#") If pts2.Length = 3 Then DataTables(pts2(1)).AppendLoad("[日程Id] = " & pts2(2)) \'追载新增加的行. End If ElseIf msg2.StartsWith("D2#") Then \'表示删除了行 Dim pts2() As String = msg2.Split("#") If pts2.Length = 3 Then DataTables(pts2(1)).RemoveFor("[日程Id] = " & pts2(2)) \'移除行 End If End If [此贴子已经被作者于2015/12/6 14:31:45编辑过]
|
-- 作者:大红袍 -- 发布时间:2015/12/6 16:45:00 -- 汗。
ReceivedMessage的代码不用改。
你要同步哪里,就合成什么表的信息,执行代码啊
QQClient.Send(bd.name, msg) |
-- 作者:zhchling -- 发布时间:2015/12/7 7:15:00 -- 客户信息表 主键: ID 行程表 主键: 日程id , 客户ID 两表关联 ID和客户ID 一对多的关系. 当在客户信息表中选中某行数据, 另一个窗口TABLE里行程表(副表) 筛选出该客户的行程. 还有一个窗口里TABLE里是关联表( 客户信息表.行程表)的方式筛选出该客户的行程. 我的思路是想用3楼的代码解决,但客户信息表的能同步, 行程表的不能. 后来发现应该是行程表的客户ID没有被准确表示出来, 可能是和筛选有关. 不知道我的思路对不对. 如果,我在 表属性里的 afteredit DataRowAdded 里分别写编辑和增加的代码, 立即保存当前行. 这样在窗口里操作数据,应该也是可以的吧.? [此贴子已经被作者于2015/12/7 7:29:01编辑过]
|
-- 作者:Hyphen -- 发布时间:2015/12/7 8:39:00 -- 方法1:更新几个表就发几条信息,按照父表、子表的顺序发送 方法2:按照父表、子表的顺序用一个符号分隔拼接更新几个表的信息
|
-- 作者:大红袍 -- 发布时间:2015/12/7 9:14:00 -- 如果你的主键是_Identify,你就要在新增的时候保存它,这样才能得到固定的主键。
或者是,你在同步之前保存也是可以的啊。其余的东西都不变。 |