以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  跨表引用问题,请教各位老师  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=140301)

--  作者:hzpy
--  发布时间:2019/9/3 9:36:00
--  跨表引用问题,请教各位老师
主表有若干人任若干职务,设计了个弹窗,在弹出时对照机构显示职务空缺情况,代码如下,总是弹窗错误,请教老师问题在哪?请老师们指导
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:村干部信息系统.table

If Forms("职务空缺情况").Opened
For Each dr As DataRow In DataTables("职数空缺").Select("工作单位_镇街 is not null and 工作单位_村居社区 is not null")
    Dim fdr As DataRow = DataTables("村干部基本信息").Find("工作单位_镇街 = \'" & dr("工作单位_镇街") & "\' and 工作单位_村居社区 = \'" & dr("工作单位_村居社区") & "\'")
      If fdr("职务排序") = "01" Then
         dr("书记") = fdr("姓名")
      Else
         dr("书记") = "空缺"
     End If
     If fdr("职务排序") = "02" Then
         dr("主任") = fdr("姓名")
      Else
         dr("主任") = "空缺"
     End If
     If fdr("职务排序") = "03" Then
        dr("会计") = fdr("姓名")
     Else
       dr("会计") = "空缺"
     End If
Next
End If

--  作者:有点蓝
--  发布时间:2019/9/3 9:54:00
--  
哪个表,或者哪个窗口的什么事件?没看到有这段代码
--  作者:hzpy
--  发布时间:2019/9/3 9:57:00
--  
窗口是 “职数空缺情况”  ,事件是 这个窗口的afterload事件,主页左下角按钮弹窗
--  作者:有点蓝
--  发布时间:2019/9/3 10:13:00
--  
首先窗口名称是错的。其次凡是Find查询的结果都必须判断一下是否为空,比如查询没有结果

If Forms("职数空缺情况").Opened
    For Each dr As DataRow In DataTables("职数空缺").Select("工作单位_镇街 is not null and 工作单位_村居社区 is not null")
        Dim fdr As DataRow = DataTables("村干部基本信息").Find("工作单位_镇街 = \'" & dr("工作单位_镇街") & "\' and 工作单位_村居社区 = \'" & dr("工作单位_村居社区") & "\'")
        If fdr IsNot Nothing
            If fdr("职务排序") = "01" Then
                dr("书记") = fdr("姓名")
            Else
……

--  作者:hzpy
--  发布时间:2019/9/3 10:19:00
--  
If Forms("职数空缺情况").Opened
For Each dr As DataRow In DataTables("职数空缺").Select("工作单位_镇街 is not null and 工作单位_村居社区 is not null")
    Dim fdr As DataRow = DataTables("村干部基本信息").Find("工作单位_镇街 = \'" & dr("工作单位_镇街") & "\' and 工作单位_村居社区 = \'" & dr("工作单位_村居社区") & "\'")
     If fdr IsNot Nothing
      If fdr("职务排序") = "01" Then
         dr("书记") = fdr("姓名")
      Else
         dr("书记") = "空缺"
     End If
     If fdr("职务排序") = "02" Then
         dr("主任") = fdr("姓名")
      Else
         dr("主任") = "空缺"
     End If
     If fdr("职务排序") = "03" Then
        dr("会计") = fdr("姓名")
     Else
       dr("会计") = "空缺"
     End If
End If
Next
End If

谢谢老师,改过了,但是主任、会计列都没用,显示的都是空缺
另:如果想窗口退出上述内容还清除该怎么办
[此贴子已经被作者于2019/9/3 10:21:51编辑过]

--  作者:有点蓝
--  发布时间:2019/9/3 10:31:00
--  
1、find只返回一条数据,其它当然没用了,改为select进行遍历

2、不要保存数据,然后使用:RejectChanges:http://www.foxtable.com/webhelp/topics/1538.htm,或者遍历这个窗口表,把数据清空
For Each r As Row In Tables("职数空缺").Rows
   
r("主任") = nothing
Next

--  作者:hzpy
--  发布时间:2019/9/3 10:42:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:错误.jpg
图片点击可在新窗口打开查看

显示错误,不知道为什么

--  作者:hzpy
--  发布时间:2019/9/3 10:49:00
--  
另外,“空缺”用红字显示可以吗
--  作者:有点蓝
--  发布时间:2019/9/3 11:11:00
--  
7楼的错误请认真看一看select的帮助和用法,而不仅仅是把find改为select。


--  作者:hzpy
--  发布时间:2019/9/3 11:38:00
--  
不好意思,研究了一下,再请老师指导

If Forms("职数空缺情况").Opened
For Each dr As DataRow In DataTables("职数空缺").Select("工作单位_镇街 is not null and 工作单位_村居社区 is not null")
    Dim fdr As List(of DataRow) = DataTables("村干部基本信息").Select("工作单位_镇街 = \'" & dr("工作单位_镇街") & "\' and 工作单位_村居社区 = \'" & dr("工作单位_村居社区") & "\'")
     If fdr IsNot Nothing
        For Each n As DataRow In fdr
          If n("职务排序") = "01" Then
         dr("书记") = n("姓名")
      Else
         dr("书记") = "空缺"
     End If
     If n("职务排序") = "02" Then
         dr("主任") = n("姓名")
      Else
         dr("主任") = "空缺"
     End If
     If n("职务排序") = "03" Then
        dr("会计") = n("姓名")
     Else
       dr("会计") = "空缺"
     End If
Next
End If
Next
End If