以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 非关联表之间的数据同步问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=70207) |
||||
-- 作者:guigui117 -- 发布时间:2015/6/17 11:55:00 -- 非关联表之间的数据同步问题 大神们,我是上次发帖求助生产工厂的仓库功能的。后来按照非关联表之间的数据同步写了相关表事件后顺利完成了正常情况下的功能。 但是现在有个非正常的情况。我数据同步的两个表为制造信息和库存信息,同步的关键为每台设备的制造编号,实际数据输入是在制造信息的表中完成。现在的情况是,如果按照正确的方式输入各项信息,每次输入的制造编号都是不同的,那样库存信息里的每台信息和制造编号中的每台信息是一一对应。但是问题来了,问题一:假如我在制造信息表中添加一行新行,在填写新的制造编号时,误将制造编号输入成前面已经输入过的(也就是新输入的制造编号和已输入的制造编号发生重复),这个时候在库存信息中自动生成的数据会产生问题,库存信息确认会新增加一行,但是新的一行的内容只填入了制造编号,别的部分全部为空;同时老的对应行的数据会被更改成新的数据。 问题二:如果我在制造信息表中的老行更改制造编号时,在库存信息表中会自动再生成一行。 所以感觉帮助文件里的代码有点问题。 Select Case e.DataCol.name Case "产品基本信息_制造编号" Dim dr As DataRow = DataTables("制造信息").Find("产品基本信息_制造编号 = \'" & e.OldValue & "\'") If dr Is Nothing Then dr = DataTables("库存信息").AddNew() dr("产品基本信息_制造编号") = e.DataRow("产品基本信息_制造编号") dr("产品基本信息_机型") = e.DataRow("产品基本信息_机型") dr("产品基本信息_发动机号") = e.DataRow("产品基本信息_发动机号") dr("产品基本信息_液压阀号") = e.DataRow("产品基本信息_液压阀号") dr("产品基本信息_生产日期") = e.DataRow("产品基本信息_生产日期") Else dr("产品基本信息_制造编号") = e.DataRow("产品基本信息_制造编号") End If Case "产品基本信息_机型","产品基本信息_发动机号","产品基本信息_生产日期","产品基本信息_液压阀号" Dim dr As DataRow = DataTables("库存信息").Find("产品基本信息_制造编号 = \'" & e.DataRow("产品基本信息_制造编号") & "\'") If dr IsNot Nothing Then dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name) End If End Select |
||||
-- 作者:guigui117 -- 发布时间:2015/6/17 11:57:00 --
|
||||
-- 作者:guigui117 -- 发布时间:2015/6/17 12:00:00 -- |
||||
-- 作者:guigui117 -- 发布时间:2015/6/17 12:01:00 -- 在制造信息表中将第一行的制造编号更改为4-3以后,库存信息表里就自动增加了一行
[此贴子已经被作者于2015/6/17 12:03:11编辑过]
|
||||
-- 作者:guigui117 -- 发布时间:2015/6/17 12:07:00 -- 假如在制造信息表中新增加的一行里填写的制造编号和老行一样,其他数据不一样,会自动在库存信息表中增加一行只有制造编号的新行,并且把老行的其他信息做相应修改 |
||||
-- 作者:大红袍 -- 发布时间:2015/6/17 12:25:00 -- Select Case e.DataCol.name Case "产品基本信息_制造编号" Dim dr As DataRow If e.OldValue <> Nothing Then dr = DataTables("库存信息").Find("产品基本信息_制造编号 = \'" & e.OldValue & "\'") Else dr = DataTables("库存信息").Find("产品基本信息_制造编号 = \'" & e.NewValue & "\'") End If If dr Is Nothing Then dr = DataTables("库存信息").AddNew() dr("产品基本信息_制造编号") = e.DataRow("产品基本信息_制造编号") dr("产品基本信息_机型") = e.DataRow("产品基本信息_机型") dr("产品基本信息_发动机号") = e.DataRow("产品基本信息_发动机号") dr("产品基本信息_液压阀号") = e.DataRow("产品基本信息_液压阀号") dr("产品基本信息_生产日期") = e.DataRow("产品基本信息_生产日期") Else dr("产品基本信息_制造编号") = e.DataRow("产品基本信息_制造编号") End If Case "产品基本信息_机型","产品基本信息_发动机号","产品基本信息_生产日期","产品基本信息_液压阀号" Dim dr As DataRow = DataTables("库存信息").Find("产品基本信息_制造编号 = \'" & e.DataRow("产品基本信息_制造编号") & "\'") If dr IsNot Nothing Then dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name) End If End Select |
||||
-- 作者:guigui117 -- 发布时间:2015/6/17 13:33:00 -- 大红袍大神您好! 还是不够完美,假设现有情况是制造信息表两行,分别为如果我在制造信息表中的第三行输入F4 4-1 3 3 日期 填表人,库存信息表中只会更改第一行的F4 4-1 1 1 日期为F4 4-1 3 3,这样的话两个表中的数据就不匹配了,库存信息表比制造信息表多一行,而且会造成后期如果发现应该把4-1更改为正确的4-3,这个时候会完全丢失掉4-1的行。 |
||||
-- 作者:大红袍 -- 发布时间:2015/6/17 14:34:00 -- 那你就禁止不允许输入重复值啊,编号列就是唯一的依据
http://www.foxtable.com/help/topics/2481.htm
|
||||
-- 作者:guigui117 -- 发布时间:2015/6/17 16:27:00 -- If e.DataCol.Name = "产品基本信息_制造编号" Then Dim dr As DataRow dr = e.DataTable.Find("产品基本信息_制造编号 = \'" & e.NewValue & "\'") If dr IsNot Nothing Then MessageBox.Show("此制造编号已经存在!") e.Cancel = True End If End If If e.DataCol.Name = "产品基本信息_发动机号" Then Dim dr As DataRow dr = e.DataTable.Find("产品基本信息_发动机号 = \'" & e.NewValue & "\'") If dr IsNot Nothing Then MessageBox.Show("此发动机号已经存在!") e.Cancel = True End If End If If e.DataCol.Name = "产品基本信息_液压阀号" Then Dim dr As DataRow dr = e.DataTable.Find("产品基本信息_液压阀号 = \'" & e.NewValue & "\'") If dr IsNot Nothing Then MessageBox.Show("此液压阀号已经存在!") e.Cancel = True End If End If 我把这段代码写进制造信息表表属性的datacolchanging里面以后,如果直接在表里输入,有相同的数据输入时能弹出提示。但是如果我用窗口输入的话,还是有数据能写进表里面。比如我已经有了4-1 1 1,在窗口里输入4-1 2 2,最后会提示此制造编号已经存在,然后制造编号列不会填入数据,但是发动机号和液压阀号里会填入,最后表中数据变成 ”空格“ 2 2
|
||||
-- 作者:大红袍 -- 发布时间:2015/6/17 19:10:00 -- 保存按钮代码
Dim dr = DataTables("制造信息").Find("产品基本信息_制造编号 = \'" & e.form.controls("TextBox2").text & "\'") |