以文本方式查看主题

-  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=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