以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- OPENQQ数据同步问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91925) |
-- 作者:9602084 -- 发布时间:2016/10/22 1:08:00 -- OPENQQ数据同步问题 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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/22 9:44:00 -- 1、追载出来的数据行状态默认就是未修改状态,肯定有其他事件更新了这行数据 2、这种实现方法没有问题 另外既然指定是发送给用户B的,发送消息的时候就没有必要发送给所有人了
|
-- 作者:9602084 -- 发布时间: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编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2016/10/23 16:25:00 -- 我测试没有这个问题。 |
-- 作者:9602084 -- 发布时间:2016/10/23 21:53:00 -- 奇了怪了 我这问题会出在哪? |
-- 作者:狐狸爸爸 -- 发布时间:2016/10/24 7:35:00 -- 做个例子发上来测试看看
|