Foxtable(狐表)用户栏目专家坐堂 → 关于父表引用子表数据


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

主题:关于父表引用子表数据

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


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
关于父表引用子表数据  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/1 9:19:00 [只看该作者]

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


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


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
  发帖心情 Post By:2015/9/1 17:59:00 [只看该作者]

谢谢老师!基本上没问题了。
还有个小情况,但不影响结果:目前使用的是DataColChanged事件,但实际上,在输入主表信息的时候,学历表中没有任何内容,所以也没有结果,这时候触发事件是无用的。可不可以在【  If e.DataCol.Name = "编号"   Then 】  中再加一个判别子表有无数据的选项:即列=编号,同时学历表有关联数据。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/1 18:56:00 [只看该作者]

If e.DataCol.Name = "编号" AndAlso e.DataRow.GetChildRows("学历").Count > 0 Then
   


 回到顶部