以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于跨表引用问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=139517)

--  作者:hzpy
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2019/8/14 17:17:00
--  
没有办法选,既然有重复就应该在其它表也加上编号
--  作者:hzpy
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2019/8/14 17:42:00
--  
没有办法设置,因为程序是不可能知道张三是哪个编号的张三。

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

--  作者:hzpy
--  发布时间:2019/8/14 17:50:00
--  
我也是这么想的,弹窗显示重名行信息,通过复选框供操作者选择,但是新手不会   
--  作者:狐狸爸爸
--  发布时间: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
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2019/8/15 16:54:00
--  
重复值问题可以参考:http://www.foxtable.com/webhelp/topics/2481.htm
--  作者:hzpy
--  发布时间: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
这个只能对新录入的重复标示,想对和录入姓名一样的行都标示,怎么办呢 

--  作者:有点蓝
--  发布时间:2019/8/15 17:13:00
--  
用法都一样啊,帮助是禁止,您可以不禁止啊,查询到重复的数据,是做提示,还是做标示,自己喜欢咯