Foxtable(狐表)用户栏目专家坐堂 → [求助]关于跨表引用问题


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

主题:[求助]关于跨表引用问题

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


加好友 发短信
等级:幼狐 帖子:63 积分:597 威望:0 精华:0 注册:2019/7/25 11:01:00
[求助]关于跨表引用问题  发帖心情 Post By:2019/8/14 17:08:00 [只看该作者]

有“村干部基本信息表和“考核”表,都有村干部编号和姓名列,“考核表跨表引用“村干部基本信息”表数据,“村干部基本信息”表“村干部编号列不重复,“姓名列可重复,“考核”表姓名列遇到重复的姓名时,自动生成在“村干部基本信息”表对应的“村干部编号”会有多个,想要实现提供选项供人选择到底是哪个编号怎么实现?
“考核”表的DataColChanged事件现有代码如下:
If e.DataCol.Name = "村干部编号" Then
    If e.NewValue Is Nothing Then
        e.DataRow("姓名") = Nothing
    Else
        Dim dr As DataRow
            dr = DataTables("村干部基本信息").Find("[村干部编号] = '" & e.NewValue & "'")
        If dr IsNot Nothing Then
            e.DataRow("姓名") = dr("姓名") 
        End If
    End If
End If
If e.DataCol.Name = "姓名" Then
    If e.NewValue Is Nothing Then
        e.DataRow("村干部编号") = Nothing
    Else
        Dim dr As DataRow
            dr = DataTables("村干部基本信息").Find("[姓名] = '" & e.NewValue & "'")
        If dr IsNot Nothing Then
            e.DataRow("村干部编号") = dr("村干部编号") 
        End If
    End If
End If

请老师指导这段该怎么修改?
[此贴子已经被作者于2019/8/14 17:17:58编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107730 积分:547983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/14 17:17:00 [只看该作者]

没有办法选,既然有重复就应该在其它表也加上编号

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


加好友 发短信
等级:幼狐 帖子:63 积分:597 威望:0 精华:0 注册:2019/7/25 11:01:00
  发帖心情 Post By:2019/8/14 17:31:00 [只看该作者]

哦,超版,可能我没写清楚,我表达简单一点,请您指导

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


有表A和表B,都有“编号”和“姓名”列,表B的DataColChanged事件,让表B填写“姓名列时,自动填入表A中此姓名对应的“编号”:

If e.DataCol.Name = "姓名" Then
    If e.NewValue Is Nothing Then
        e.DataRow("编号") = Nothing
    Else
        Dim dr As DataRow
            dr = DataTables("表A").Find("[姓名] = '" & e.NewValue & "'")
        If dr IsNot Nothing Then
            e.DataRow("编号") = dr("编号") 
        End If
    End If
End If

遇到的问题是,表A有重名的,例如:编号001和002都对应张三,那么表B“姓名列填入张三时,会有两个对应编号,怎么设置选项呢?
表B的编号列根据姓名自动填充,表A姓名对应的编号
[此贴子已经被作者于2019/8/14 17:33:31编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107730 积分:547983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/14 17:42:00 [只看该作者]

没有办法设置,因为程序是不可能知道张三是哪个编号的张三。

可以考虑建一个模式窗口,把查询到的结果放入窗口供选择,类似自定义录入窗口,选择后通过全局变量取得选择结果

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


加好友 发短信
等级:幼狐 帖子:63 积分:597 威望:0 精华:0 注册:2019/7/25 11:01:00
  发帖心情 Post By:2019/8/14 17:50:00 [只看该作者]

我也是这么想的,弹窗显示重名行信息,通过复选框供操作者选择,但是新手不会   

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


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2019/8/15 8:31:00 [只看该作者]

可以参考一下:
http://www.foxtable.com/webhelp/topics/1534.htm
http://www.foxtable.com/webhelp/topics/2116.htm
http://www.foxtable.com/webhelp/topics/2465.htm

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


加好友 发短信
等级:幼狐 帖子:63 积分:597 威望:0 精华:0 注册:2019/7/25 11:01:00
  发帖心情 Post By:2019/8/15 16:25:00 [只看该作者]

感谢管理员老师亲自解惑!
图片点击可在新窗口打开查看此主题相关图片如下:无标题1234567898.jpg
图片点击可在新窗口打开查看

自定义录入能解决问题,但是从我们实际来看,重名频率不高,我打算在表A增加“是否重名”逻辑列,对重名人员进行标示:
If e.DataCol.Name = "姓名" Then
    Dim dr As DataRow 
    dr = e.DataTable.Find("姓名 = '" & e.NewValue & "'")
    If dr IsNot Nothing Then
       e.DataRow("是否重名") = True    
Else
       e.DataRow("是否重名") = False
       ??????????????
    End If
End If

另外,在表B设置DataColChanged事件,没有重名的就填入表A中改姓名对应的编号,如果有重名,就不填信息,并弹窗提示手工录入:
If e.DataCol.Name = "姓名" Then
    If e.NewValue Is Nothing Then
        e.DataRow("编号") = Nothing
    Else
        Dim dr As DataRow
            dr = DataTables("表A").Find("[姓名] = '" & e.NewValue & "'")
        If dr IsNot Nothing Then
            Dim pdr As DataRow
            pdr = DataTables("表A").Find("[是否重名] = '" & e.NewValue & "'")
                 If pdr = True Then
                       e.DataRow("编号") = dr("编号")
                    Else
                        e.DataRow("编号") = Nothing
                        MessageBox.Show("该村干部存在重名,请手工录入村干部编号!")
                   End If
        else
            e.DataRow("编号") = Nothing
            e.DataRow("姓名") = Nothing
           MessageBox.Show("该村干部不存在,请先在表A录入此村干部信息!")
        End If
    End If
End If

存在两个问题,请老师指导
一是表A中重名人员标示问题,现在实现了新录入的对应列判断,怎么实现与此新录入人员重名的也标示呢?
二是表B中,录入姓名列后,判断表A中是否有对应人员,如没有,则不能录入信息;如有,继续判断对应的“是否重名”列是否为真,如果重名,则不录入“编号”,弹窗“请手工录入”

[此贴子已经被作者于2019/8/15 16:28:50编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107730 积分:547983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/15 16:54:00 [只看该作者]

重复值问题可以参考:http://www.foxtable.com/webhelp/topics/2481.htm

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


加好友 发短信
等级:幼狐 帖子:63 积分:597 威望:0 精华:0 注册:2019/7/25 11:01:00
  发帖心情 Post By:2019/8/15 17:10:00 [只看该作者]

蓝版您好,不是禁止重复的问题,是通过标示重复,实现其他目的。

If e.DataCol.Name = "姓名" Then
    Dim dr As DataRow 
    dr = e.DataTable.Find("姓名 = '" & e.NewValue & "'")
    If dr IsNot Nothing Then
       e.DataRow("是否重名") = True    
Else
       e.DataRow("是否重名") = False
       ??????????????
    End If
End If
这个只能对新录入的重复标示,想对和录入姓名一样的行都标示,怎么办呢 

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107730 积分:547983 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/15 17:13:00 [只看该作者]

用法都一样啊,帮助是禁止,您可以不禁止啊,查询到重复的数据,是做提示,还是做标示,自己喜欢咯

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