以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于父表引用子表数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=74039) |
||||
-- 作者:lake163 -- 发布时间:2015/9/1 6:38:00 -- 关于父表引用子表数据 人员表与学历表通过编号建立父子关联:“人员_学历”。 每个人在学历表中有多条学历记录,学历表中:根据学历代码可以判断学历高低(高学历代码值小)、学历类型分全日制和在职两类。 现在需要在父表中生成:全日制最高学历毕业学校及专业。(其他的最高学历、最高学历代码、最高学历毕业学校及专业等相类似) 这里有两个特殊点:一是人员数据先输入,学历数据后输入;二是FIND中需要多个条件比较:比如,全日制最高学历毕业学校及专业,需要在学历表中查找的条件:编号与人员编号相符、学历类别为全日制、学历代码为最小值,然后将找到的行的毕业学校、专业两列内容相加。 查看了跨表数据引用、动态合成表达式等内容,仍不能完成。请教如何编写代码,且运行效率较高。 尝试了一下: If e.DataCol.Name = "编号" Then If e.NewValue Is Nothing Then e.DataRow("全日制最高学历毕业学校及专业") = Nothing Else Dim dr1 As DataRow = Tables("基本信息").Current.DataRow Dim dr2 As DataRow dr2 = DataTables("学历").find("[编号] = \'" & dr1("编号") & "’") ‘这里写一个比较条件时能正常运行,但后面就不会写了: 需要比较编号相等、然后类别为全日制、然后代码最小. (代码可能需要通过排序方式) ‘查看了动态生成表达式:如dr2 = DataTables("表B").Find("[品名] = \'" & dr1("品名") & "\'And [规格] = \'" & dr1("规格") & "\'"),但仍然做不出 If dr2 IsNot Nothing e.DataRow("全日制最高学历毕业学校及专业") = dr2("毕业学校")+dr2("专业") End If End If End If
[此贴子已经被作者于2015/9/1 6:47:35编辑过]
|
||||
-- 作者:大红袍 -- 发布时间:2015/9/1 9:19:00 --
|
||||
-- 作者:lake163 -- 发布时间:2015/9/1 17:59:00 -- 谢谢老师!基本上没问题了。 还有个小情况,但不影响结果:目前使用的是DataColChanged事件,但实际上,在输入主表信息的时候,学历表中没有任何内容,所以也没有结果,这时候触发事件是无用的。可不可以在【 If e.DataCol.Name = "编号" Then 】 中再加一个判别子表有无数据的选项:即列=编号,同时学历表有关联数据。
|
||||
-- 作者:大红袍 -- 发布时间:2015/9/1 18:56:00 -- If e.DataCol.Name = "编号" AndAlso e.DataRow.GetChildRows("学历").Count > 0 Then |