以文本方式查看主题

-  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

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目1.table

[此贴子已经被作者于2015/9/1 6:47:35编辑过]

--  作者:大红袍
--  发布时间:2015/9/1 9:19:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者: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