以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  表与表间的数据引用问题求指教?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=63341)

--  作者:lisheng7177
--  发布时间:2015/1/19 11:15:00
--  表与表间的数据引用问题求指教?

版主:关于表与表之间的数据列问题不是很明白,有表1、表2、表3等表,它们之间的数据引用如不用按钮(写相应代码)的话,是不是必需设为父子表?

假设表1 有“工作单位”“姓名”“身份证号码”“性别”“参加工作时间”等列,表2也有这些列,但多了“成绩”列,我的目标是,表1的列内容输入后,表2的相关列会自动填入,但我表2中不想要“参加工作时间”列,按我现在的方法用按钮点击从表1导到表2去,但表2中必需建立和表1同样的列(表2可以多成绩列);

同样表3用表2的数据也是一样,如果还有表4要用表3的数据,表5要用表4的数据,那么后面的的表的列数只会越来越多,但有些列在后面的表中可以不要;

 

现在问题是我如果不把列设成一样,导入的时候就会提示少某某列,这个问题该怎么解决?


--  作者:Bin
--  发布时间:2015/1/19 11:18:00
--  
1.可以设置关联用表达式引用 
2.可以编写代码引用

--  作者:lisheng7177
--  发布时间:2015/1/19 11:20:00
--  
谢谢版主!我去学习、学习。
--  作者:lisheng7177
--  发布时间:2015/1/19 13:13:00
--  

If e.DataCol.Name = "身份证号码" Then
    Dim nms() As String = {"工作单位","县公司","姓名","性别","身份证号码"}
    If e.NewValue Is Nothing Then
        For Each nm As String In nms
            e.DataRow(nm) = Nothing
        Next
    Else
        Dim dr As DataRow
        dr = DataTables("报名登记表").Find("[身份证号码] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            For Each nm As String In nms
                e.DataRow(nm) = dr(nm)
            Next
        End If
    End If
End If

 

If e.DataCol.Name = "身份证号码" Then
    If e.NewValue Is Nothing Then
        e.DataRow("工作单位") = Nothing
        e.DataRow("县公司") = Nothing
        e.DataRow("姓名") = Nothing
        e.DataRow("性别") = Nothing
        e.DataRow("身份证号码") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("报名登记表").Find("[身份证号码] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            e.DataRow("工作单位") = dr("工作单位")
            e.DataRow("县公司") = dr("县公司")
            e.DataRow("姓名") = dr("姓名")
            e.DataRow("性别") = dr("性别")
            e.DataRow("身份证号码") = dr("身份证号码")
        End If
    End If
End If

 

版主,上述两段代码是不是功能等同?可以去掉其一吗?


--  作者:lisheng7177
--  发布时间:2015/1/19 13:14:00
--  
我看帮助,有点糊涂了,想做到两表之间数据引用,表1变,表2也自动变
--  作者:lisheng7177
--  发布时间:2015/1/19 13:22:00
--  

自己实践,应该已搞定,因为想代码看起来简洁些,所以去掉了下面这段代码,发现效果还是一样(都是表2的datacolchanged事件中的)。

 

If e.DataCol.Name = "身份证号码" Then
    If e.NewValue Is Nothing Then
        e.DataRow("工作单位") = Nothing
        e.DataRow("县公司") = Nothing
        e.DataRow("姓名") = Nothing
        e.DataRow("性别") = Nothing
        e.DataRow("身份证号码") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("报名登记表").Find("[身份证号码] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            e.DataRow("工作单位") = dr("工作单位")
            e.DataRow("县公司") = dr("县公司")
            e.DataRow("姓名") = dr("姓名")
            e.DataRow("性别") = dr("性别")
            e.DataRow("身份证号码") = dr("身份证号码")
        End If
    End If
End If


--  作者:Bin
--  发布时间:2015/1/19 13:59:00
--  
http://www.foxtable.com/help/index.html?n=1453.htm
--  作者:Bin
--  发布时间:2015/1/19 14:00:00
--  
一个是表A引用表B   一段是表B更新表A  别搞混
--  作者:lisheng7177
--  发布时间:2015/1/19 20:51:00
--  

If e.DataCol.Name = "身份证号码" Then
    If e.NewValue Is Nothing Then
        e.DataRow("工作单位") = Nothing
        e.DataRow("县公司") = Nothing
        e.DataRow("姓名") = Nothing
        e.DataRow("性别") = Nothing
        e.DataRow("身份证号码") = Nothing
        e.DataRow("文化程度") = Nothing
        e.DataRow("鉴定等级") = Nothing
        e.DataRow("申报鉴定工种") = Nothing
        e.DataRow("鉴定批次") = Nothing
        e.DataRow("申报性质") = Nothing
        e.DataRow("备注") = Nothing
        e.DataRow("照片") = Nothing
        e.DataRow("是否合格") = Nothing
        e.DataRow("理论考否") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("报名登记表").Find("[身份证号码] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing
            e.DataRow("工作单位") = dr("工作单位")
            e.DataRow("县公司") = dr("县公司")
            e.DataRow("姓名") = dr("姓名")
            e.DataRow("性别") = dr("性别")
            e.DataRow("身份证号码") = dr("身份证号码")
            e.DataRow("文化程度") = dr("文化程度")
            e.DataRow("鉴定等级") = dr("鉴定等级")
            e.DataRow("申报鉴定工种") = dr("申报鉴定工种")
            e.DataRow("鉴定批次") = dr("鉴定批次")
            e.DataRow("申报性质") = dr("申报性质")
            e.DataRow("备注") = dr("备注")
            e.DataRow("照片") = dr("照片")
            e.DataRow("是否合格") = dr("是否合格")
            e.DataRow("理论考否") = dr("理论考否")
        End If
    End If
End If

版主,这段代码能再简化些吗?这要再多些列,就更长了。


--  作者:lisheng7177
--  发布时间:2015/1/19 20:52:00
--  
本来事件里就还有其它方面的代码,如有需要再加其它的,看都看不转,有错都难找!