Foxtable(狐表)用户栏目专家坐堂 → OPENQQ数据同步问题


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

主题:OPENQQ数据同步问题

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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
OPENQQ数据同步问题  发帖心情 Post By:2016/10/22 1:08:00 [只看该作者]

SQL 数据库,同一数据源两个表:表A,表B.两个表结构不完全一致

 

用户A操作的是表A,

用户A要删除表A中的一条数据,并有关内容写入表B,同时向用户B发出新增数据通知

 

Dim cmd As new SQLCommand

cmd.ConnectionName = "rsgl"

cmd.CommandText = "insert into 表B (姓名,身份证号码) values ('张三','123456789')"

cmd.ExecuteNonQuery

 

Dim dr As DataRow

dr = DataTables(表A).SQLFind("身份证号码 = '123456789'")

If dr IsNot Nothing

    For Each bd As QQBuddy In QQClient.Buddies

        If bd.OnLine Then

            QQClient.send(bd.name,"A#" & "A" & "#" & dr("_identify"))

        End If

    Next

End If

 

用户B操作表B

用户B接收数据

 

Dim msg As String = e.Message

If msg.StartsWith("U#") Then '表示修改了某行,则重新加载

    Dim pts() As String = msg.Split("#")

    If pts.Length = 3 AndAlso vars("basetable") = pts(1) 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 AndAlso vars("basetable") = pts(1) 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 AndAlso vars("basetable") = pts(1) Then

        DataTables(pts(1)).RemoveFor("[_Identify] = "  & pts(2)) '移除行

    End If

ElseIf msg = "!!" Then     '服务器在规定时间要清理数据库,提示用户暂停服务倒计时开始

    JsTime = Date.now.AddMinutes(5)

    Forms("系统暂停服务").open

End If

 

用户B能够正常追载数据,但追载出来的数据行状态显示为修改行.

问:1、如何让表B追载出来的数据行状态为未修改状态?

2、两个结构不完全的数据表之间进行数据转移,上述思路是不是走偏了?

请老师们指点一下,谢谢

 

 

[此贴子已经被作者于2016/10/22 1:09:08编辑过]

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


加好友 发短信
等级:超级版主 帖子:110544 积分:562604 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/22 9:44:00 [只看该作者]

1、追载出来的数据行状态默认就是未修改状态,肯定有其他事件更新了这行数据

2、这种实现方法没有问题

另外既然指定是发送给用户B的,发送消息的时候就没有必要发送给所有人了

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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
还不行  发帖心情 Post By:2016/10/22 22:40:00 [只看该作者]

还不行。
重新做了个试验,不采取数据同步,就是简单的测试:
1、新建两个项目:项目1、项目2,两个项目连接同一个SQL 数据源。
2、项目A未加载任何外部表;项目B加载外部表“测试”,但不加载数据,外部表参照“控制初始加载量”内容设置:数据源 选“加载所有行”,过滤/ 排序 设置[_identify] is null。
3、两个项目均未写任何代码,采取命令窗口测试。

首先,打开项目A,在命令窗口如下代码:

Dim cmd As new SQLCommand
cmd.C
cmd.CommandText = "insert into 测试 (姓名,身份证号码) values ('宋江','123456')"
cmd.ExecuteNonQuery

然后,打开项目B,在命令窗口写如下代码:
DataTables("测试").AppendLoad("身份证号码 = '123654'")

执行后,宋江出来了,但该行状态为修改行。

以上就是全部动作,一句额外代码都没写。
[此贴子已经被作者于2016/10/22 23:30:47编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/10/23 16:25:00 [只看该作者]

我测试没有这个问题。

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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
奇了怪了  发帖心情 Post By:2016/10/23 21:53:00 [只看该作者]

我这问题会出在哪?

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/10/24 7:35:00 [只看该作者]

做个例子发上来测试看看

 回到顶部