Foxtable(狐表)用户栏目专家坐堂 → [求助]即时同步数据时,同步当前表只显示最后增加的记录(问题已解决)


  共有3281人关注过本帖树形打印复制链接

主题:[求助]即时同步数据时,同步当前表只显示最后增加的记录(问题已解决)

帅哥哟,离线,有人找我吗?
sjx71
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4602 威望:0 精华:0 注册:2013/5/22 15:32:00
[求助]即时同步数据时,同步当前表只显示最后增加的记录(问题已解决)  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
sjx71
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4602 威望:0 精华:0 注册:2013/5/22 15:32:00
  发帖心情 Post By:2015/11/19 18:36:00 [显示全部帖子]

谢谢大红袍老师

 

问题已经解决

 

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

 


 回到顶部
帅哥哟,离线,有人找我吗?
sjx71
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4602 威望:0 精华:0 注册:2013/5/22 15:32:00
  发帖心情 Post By:2015/11/19 19:58:00 [显示全部帖子]

哦 谢谢

 


 回到顶部
帅哥哟,离线,有人找我吗?
sjx71
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4602 威望:0 精华:0 注册:2013/5/22 15:32:00
  发帖心情 Post By:2015/11/21 16:47:00 [显示全部帖子]

老师 你好

 

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

 

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

 

可能会是什么问题

 

谢谢

 


 回到顶部
帅哥哟,离线,有人找我吗?
sjx71
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4602 威望:0 精华:0 注册:2013/5/22 15:32:00
  发帖心情 Post By:2015/11/21 17:33:00 [显示全部帖子]

哦     能不能写几句程序来判断这种情况,保存的时候避免这种情况发生

 回到顶部
帅哥哟,离线,有人找我吗?
sjx71
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4602 威望:0 精华:0 注册:2013/5/22 15:32:00
  发帖心情 Post By:2015/11/27 2:11:00 [显示全部帖子]

老师 再帮帮我吧

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

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

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

怎么解决这个问题?

谢谢



 回到顶部
帅哥哟,离线,有人找我吗?
sjx71
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4602 威望:0 精华:0 注册:2013/5/22 15:32:00
  发帖心情 Post By:2015/11/27 13:45:00 [显示全部帖子]

附件是程序中主要相关的代码,请老师帮忙看一下

 

我连的是外部数据,怎么往上传相关例子

  

 

多谢

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:eventcode.txt


 回到顶部
帅哥哟,离线,有人找我吗?
sjx71
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:4602 威望:0 精华:0 注册:2013/5/22 15:32:00
  发帖心情 Post By:2015/11/30 9:51:00 [显示全部帖子]

问题已解决,这两天我让技术支持帮我远程,找到了问题,并给我指导了解决办法,在此深表感谢!

 

不管在哪写,要保证新增的行保存到数据库,然后生成真正的_Identify,才不会有问题。在BeforeSaveDAtaRow中做不行的

 

我的一段程序写在BeforeSaveDataRow里,跟例子中的点按钮保存不太一样,少写了一个 r.save() 语句。

 

r.Save()
'
一定要在保存后合成信息,因为新增行的主键在保存后才生成

由于没有保存,所以新增行没有生成主键,以至于多人录入时会产生主键冲突的毛病,保存时会出现死机。

 

为此,我在全局表事件DataRowAdded中加上一句 e.DataTable.Save() , 这样每增加一行都会生成一个新的主键,不会产生冲突。

 

另外,老师也建议最好不要用 _Identify 进行复杂的逻辑处理, _Identify的值不可控。

 

示例只是给您一个用法的参考,不能完全照搬。建议您还是不要用 _Identify 进行复杂的逻辑处理。 _Identify 适合用在查询中

 


 回到顶部