以文本方式查看主题
- Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2)
---- [求助]OpenQQ即时高效同步数据 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=81486)
|
-- 作者:yupeng
-- 发布时间:2016/2/29 10:06:00
-- [求助]OpenQQ即时高效同步数据
OpenQQ即时高效同步数据
按照教程做完,可以实现同步数据,但是A表有很多子表,子表的数据怎样同时同步数据。谢谢
|
-- 作者:大红袍
-- 发布时间:2016/2/29 10:08:00
--
呃,每个表修改后都同步,就不存在你问的问题。
|
-- 作者:yupeng
-- 发布时间:2016/2/29 11:54:00
--
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 Dim fl As String = "订单编号 = \'" & dr("订单编号") & "\'" dr.Load() \'重新加载此行 LockBaseMainForm() \'锁定主窗口 DataTables("裁床单").StopRedraw \'停止绘制订单明细 DataTables("裁床单").RemoveFor(fl) \'移除当前订单的订单明细 DataTables("裁床单").Appendload(fl) \'追载当前订单的订单明细 DataTables("裁床单").ResumeRedraw \'恢复绘制订单明细
UnLockBaseMainForm() \'解锁主窗口 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 ElseIf msg.StartsWith("D#") Then \'表示删除了行 Dim pts() As String = msg.Split("#") If pts.Length = 3 Then DataTables(pts(1)).RemoveFor("[_Identify] = " & pts(2)) \'移除行 End If End If
我刚才用这方法也可以子表即时同步了。
但是在同步其它表时,也在重新加载子表,但是其它表没有“裁床单”子表,我想写个判断,
要同步的表 = 生产进度表 时执行代码1 否则执行代码2.请问这个判断怎样写。
[此贴子已经被作者于2016/2/29 13:34:21编辑过]
|
-- 作者:大红袍
-- 发布时间:2016/2/29 14:57:00
--
没必要这样做。
每一个表,如果新增或修改以后都同步,就没问题啊。你子表修改也会同步啊。
|
-- 作者:大红袍
-- 发布时间:2016/2/29 14:59:00
--
如果要判断表名,这样写
If pts(1) = "生产进度表" Then
Else
End If
|
-- 作者:yupeng
-- 发布时间:2016/2/29 15:26:00
--
Tables("生产进度表").Current.Save()
DataTables("制单数明细").Save \' 子表
DataTables("裁床单").Save ‘ 子表
\'========以下代码为即时同步数据========= 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 \'========以上代码为即时同步数据=========
父表的先定行和两个子表在一个按钮内保存 按照您的思路 请问代码要怎样改 谢谢
|
-- 作者:大红袍
-- 发布时间:2016/2/29 15:44:00
--
修改了的所有表、所有数据行,都要合成信息发送给每一个人。
|
-- 作者:yupeng
-- 发布时间:2016/2/29 16:05:00
--
意思明白
我的意思是这里同时保存了3个表 以下代码在一个代码窗口写3次写不了
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
|
-- 作者:大红袍
-- 发布时间:2016/2/29 16:16:00
--
For Each dr As DataRow In DataTables("制单数明细").datarows If dr.RowState <> DataRowState.Unchanged Then Dim p As String = IIF(dr.RowState = DataRowState.Added, "A#", "U#") dr.Save() \'一定要在保存后合成信息,因为新增行的主键在保存后才生成 Dim msg As String = p & dr.DataTable.Name & "#" & dr("_Identify") For Each bd As QQBuddy In QQClient.Buddies If bd.Online Then QQClient.Send(bd.name, msg) End If Next End If Next
For Each dr As DataRow In DataTables("裁床单").datarows If dr.RowState <> DataRowState.Unchanged Then Dim p As String = IIF(dr.RowState = DataRowState.Added, "A#", "U#") dr.Save() \'一定要在保存后合成信息,因为新增行的主键在保存后才生成 Dim msg As String = p & dr.DataTable.Name & "#" & dr("_Identify") For Each bd As QQBuddy In QQClient.Buddies If bd.Online Then QQClient.Send(bd.name, msg) End If Next End If Next
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
|