Foxtable(狐表)用户栏目专家坐堂 → 非关联表之间的数据同步问题


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

主题:非关联表之间的数据同步问题

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


加好友 发短信
等级:婴狐 帖子:37 积分:327 威望:0 精华:0 注册:2015/5/13 10:00:00
非关联表之间的数据同步问题  发帖心情 Post By:2015/6/17 11:55:00 [只看该作者]

      大神们,我是上次发帖求助生产工厂的仓库功能的。后来按照非关联表之间的数据同步写了相关表事件后顺利完成了正常情况下的功能。


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看


      但是现在有个非正常的情况。我数据同步的两个表为制造信息和库存信息,同步的关键为每台设备的制造编号,实际数据输入是在制造信息的表中完成。现在的情况是,如果按照正确的方式输入各项信息,每次输入的制造编号都是不同的,那样库存信息里的每台信息和制造编号中的每台信息是一一对应。但是问题来了,问题一:假如我在制造信息表中添加一行新行,在填写新的制造编号时,误将制造编号输入成前面已经输入过的(也就是新输入的制造编号和已输入的制造编号发生重复),这个时候在库存信息中自动生成的数据会产生问题,库存信息确认会新增加一行,但是新的一行的内容只填入了制造编号,别的部分全部为空;同时老的对应行的数据会被更改成新的数据。
      问题二:如果我在制造信息表中的老行更改制造编号时,在库存信息表中会自动再生成一行。
      所以感觉帮助文件里的代码有点问题。





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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:37 积分:327 威望:0 精华:0 注册:2015/5/13 10:00:00
  发帖心情 Post By:2015/6/17 11:57:00 [只看该作者]

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


图片点击可在新窗口打开查看此主题相关图片如下:4.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:婴狐 帖子:37 积分:327 威望:0 精华:0 注册:2015/5/13 10:00:00
  发帖心情 Post By:2015/6/17 12:00:00 [只看该作者]



图片点击可在新窗口打开查看此主题相关图片如下:5.png
图片点击可在新窗口打开查看






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


加好友 发短信
等级:婴狐 帖子:37 积分:327 威望:0 精华:0 注册:2015/5/13 10:00:00
  发帖心情 Post By:2015/6/17 12:01:00 [只看该作者]



图片点击可在新窗口打开查看此主题相关图片如下:6.png
图片点击可在新窗口打开查看


在制造信息表中将第一行的制造编号更改为4-3以后,库存信息表里就自动增加了一行
[此贴子已经被作者于2015/6/17 12:03:11编辑过]

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


加好友 发短信
等级:婴狐 帖子:37 积分:327 威望:0 精华:0 注册:2015/5/13 10:00:00
  发帖心情 Post By:2015/6/17 12:07:00 [只看该作者]

假如在制造信息表中新增加的一行里填写的制造编号和老行一样,其他数据不一样,会自动在库存信息表中增加一行只有制造编号的新行,并且把老行的其他信息做相应修改


图片点击可在新窗口打开查看此主题相关图片如下:7.png
图片点击可在新窗口打开查看



图片点击可在新窗口打开查看此主题相关图片如下:8.png
图片点击可在新窗口打开查看




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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:37 积分:327 威望:0 精华:0 注册:2015/5/13 10:00:00
  发帖心情 Post By: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的行。


图片点击可在新窗口打开查看此主题相关图片如下:图3.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/6/17 14:34:00 [只看该作者]

 那你就禁止不允许输入重复值啊,编号列就是唯一的依据

 

 http://www.foxtable.com/help/topics/2481.htm

 


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


加好友 发短信
等级:婴狐 帖子:37 积分:327 威望:0 精华:0 注册:2015/5/13 10:00:00
  发帖心情 Post By: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

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/6/17 19:10:00 [只看该作者]

保存按钮代码

 

Dim dr = DataTables("制造信息").Find("产品基本信息_制造编号 = '" & e.form.controls("TextBox2").text & "'")
If dr IsNot Nothing Then
    MessageBox.Show("不能保存")
Else
    Tables("制造信息").AddNew()
    Tables("库存信息").AddNew()
    Tables("制造信息").current("产品基本信息_机型")=e.form.controls("ComboBox2").text
    Tables("制造信息").current("产品基本信息_制造编号")=e.form.controls("TextBox2").text
    Tables("制造信息").current("产品基本信息_发动机号")=e.form.controls("TextBox3").text
    Tables("制造信息").current("产品基本信息_液压阀号")=e.form.controls("TextBox4").text
    Tables("制造信息").current("产品基本信息_生产日期")=e.form.controls("DateTimePicker1").text
    Tables("制造信息").current("填表人")=e.Form.Controls("ComboBox1").text
    Tables("库存信息").current("产品基本信息_机型")=e.form.controls("ComboBox2").text
    Tables("库存信息").current("产品基本信息_制造编号")=e.form.controls("TextBox2").text
    Tables("库存信息").current("产品基本信息_发动机号")=e.form.controls("TextBox3").text
    Tables("库存信息").current("产品基本信息_液压阀号")=e.form.controls("TextBox4").text
    Tables("库存信息").current("产品基本信息_生产日期")=e.form.controls("DateTimePicker1").text
End If


 回到顶部
总数 11 1 2 下一页