以文本方式查看主题 - 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 -- 哦,超版,可能我没写清楚,我表达简单一点,请您指导
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 -- 感谢管理员老师亲自解惑! ![]() ![]() 自定义录入能解决问题,但是从我们实际来看,重名频率不高,我打算在表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 -- 用法都一样啊,帮助是禁止,您可以不禁止啊,查询到重复的数据,是做提示,还是做标示,自己喜欢咯 |