以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]即时同步数据时,同步当前表只显示最后增加的记录(问题已解决)  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=77524)

--  作者:sjx71
--  发布时间:2015/11/19 17:36:00
--  [求助]即时同步数据时,同步当前表只显示最后增加的记录(问题已解决)

在即时同步程序中,删除记录、修改记录、增加记录都可以实现即时同步

 

如果我最后一次操作是增加记录,无论是增加一条记录或多条记录,保存后,在别的客户端能够显示新增加的记录

 

但再点同步当前表或同步所有表,那么该表就会只显示最后增加的一条记录。

 

请老师帮我看看程序。

 

谢谢!

 

OpenQQ客户端RecievedMessage事件代码如下:

 

Dim dr1 As DataRow = DataTables("信息").AddNew
dr1("发送者") = iif(e.UserName > "",e.UserName,"服务器")
dr1("时间") = Date.Now()
dr1("信息") = e.Message

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
            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("[_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

 

全局表事件BeforeSaveDataRow 代码如下:

 

If e.DataTable.name <> "信息" Then
    Dim r As DataRow = e.DataRow
    Dim p As String = IIF(r.RowState = DataRowState.Added, "A#", "U#")
   
    Dim msg As String = p & e.DataTable.Name & "#" & r("_Identify")
    For Each bd As QQBuddy In QQClient.Buddies
        If bd.Online Then
            QQClient.Send(bd.name, msg)
        End If
    Next
End If

[此贴子已经被作者于2015/11/30 9:51:36编辑过]

--  作者:大红袍
--  发布时间:2015/11/19 18:00:00
--  

AppendLoad要谨慎使用。

 

DataTables(pts(1)).AppendLoad("[_Identify] = " &  pts(2)) \'追载新增加的行

 

改成

 

Dim temp As String = DataTables(pts(1)).LoadFilter

DataTables(pts(1)).AppendLoad("[_Identify] = " &  pts(2)) \'追载新增加的行

DataTables(pts(1)).LoadFilter = temp


--  作者:sjx71
--  发布时间:2015/11/19 18:36:00
--  

谢谢大红袍老师

 

问题已经解决

 

那两句话是什么意思,不太明白

 


--  作者:大红袍
--  发布时间:2015/11/19 19:29:00
--  
AppendLoad 会改变 LoadFilter 的值,但后面没改回来,可能是bug
--  作者:sjx71
--  发布时间:2015/11/19 19:58:00
--  

哦 谢谢

 


--  作者:sjx71
--  发布时间:2015/11/21 16:47:00
--  

老师 你好

 

还是那个程序    刚又碰到另外一个问题

 

我在修改某行之后,光标没有离开最后修改的一个单元格,保存的时候,这个单元格的内容修改情况别人看不到(并不是每回都这样),

 

可能会是什么问题

 

谢谢

 


--  作者:Hyphen
--  发布时间:2015/11/21 17:15:00
--  

保存前把光标移开,不然Datatable认为仍然是编辑状态


--  作者:sjx71
--  发布时间:2015/11/21 17:33:00
--  
哦     能不能写几句程序来判断这种情况,保存的时候避免这种情况发生
--  作者:大红袍
--  发布时间:2015/11/22 14:48:00
--  
以下是引用sjx71在2015/11/21 17:33:00的发言:
哦     能不能写几句程序来判断这种情况,保存的时候避免这种情况发生

 

保存的时候,把焦点移开。

 

tables("表A").FinishEditing


--  作者:sjx71
--  发布时间:2015/11/27 2:11:00
--  
老师 再帮帮我吧

还是那个程序,假如两个人同时输一个表的数据,增加了多行,但都没有保存,这时可以看到两人输入的记录中 _Identify 很多是重复的

这时候一个人保存,就会弹出运行错误          列“_Identify"被约束是唯一的。值”6968“已存在。

有时点关闭弹窗还可以继续运行,有时就直接死机。 

怎么解决这个问题?

谢谢