以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]跨表条件引用的代码(已解决)  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=12845)

--  作者:yyzlxc
--  发布时间:2011/9/17 14:33:00
--  [求助]跨表条件引用的代码(已解决)

一段跨表条件引用的代码,要求将设备折旧表中符合条件的产权单位的值填写到设备借用产权单位的对应单元格中,此段代码是按照帮助中的代码改写的,帮助中的条件都是字符串数据,而本例的条件中有日期数据,所以代码运行后没有结果,请各位老师帮助看看,代码应该如何修改,谢谢!!

 

设备借用_DataColChanged

Case "设备编号","借用日期","归还日期"
    Dim dr As DataRow = e.DataRow
    Dim pr As DataRow
    If dr.IsNull("设备编号") OrElse dr.IsNull("借用日期") OrElse dr.IsNull("归还日期") Then
        dr("产权单位") = Nothing
    Else
        Dim filter As String
        filter = "设备编号 = \'" & dr("设备编号") & "\' And 启用日期 <= \'" & dr("借用日期") & "\' And 停用日期 >= \'" & dr("归还日期") & "\'"
        pr = DataTables("设备折旧").Find(filter)
        If pr IsNot Nothing Then
            dr("产权单位") = pr("产权单位")
        End If
    End If

 

附上项目文件:

 

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

[此贴子已经被作者于2011-9-18 12:59:17编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/9/17 15:01:00
--  

参考:

 

http://www.foxtable.com/help/topics/1284.htm

 

要看完。


--  作者:yyzlxc
--  发布时间:2011/9/17 16:09:00
--  

谢谢狐爸老师的回复。根据狐爸老师的指点,我在代码中加了两组#号和三组方括号(如下),但是还是不能显示结果,不知代码错在哪里,还请各位老师指教,谢谢!!

 

Case "设备编号","借用日期","归还日期"
    Dim dr As DataRow = e.DataRow
    Dim pr As DataRow
    If dr.IsNull("设备编号") OrElse dr.IsNull("借用日期") OrElse dr.IsNull("归还日期") Then
        dr("产权单位") = Nothing
    Else
        Dim filter As String
        filter = "[设备编号] = \'" & dr("设备编号") & "\' And [启用日期] <= # " & dr("借用日期") & "# And [停用日期] >= # " & dr("归还日期") & "# "
        pr = DataTables("设备折旧").Find(filter)
        If pr IsNot Nothing Then
            dr("产权单位") = pr("产权单位")
        End If
    End If

[此贴子已经被作者于2011-9-17 20:12:54编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/9/18 10:14:00
--  

呵呵,代码应该没有错,不能运行的原因在于这个:

 

http://www.foxtable.com/help/topics/2242.htm

 

 

你的代码结构是:

 

 

Select Case  e.DataCol.Name
    Case = "设备编号"
    Case "去向"
    Case "借用日期","归还日期"
    Case "设备编号","借用日期","归还日期"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("设备编号") OrElse dr.IsNull("借用日期") OrElse dr.IsNull("归还日期") Then
            dr("产权单位") = Nothing
        Else
            Dim filter As String
            filter = "设备编号 = \'" & dr("设备编号") & "\' And 启用日期 <= \'" & dr("借用日期") & "\' And 停用日期 >= \'" & dr("归还日期") & "\'"
            pr = DataTables("设备折旧").Find(filter)
            If pr IsNot Nothing Then
                dr("产权单位") = pr("产权单位")
            End If
        End If
End Select

 

所以你修改设备编号、借用日期、归还日期中的任何一列,最后面的一段代码都不会执行的,被前面的Case语句拦截了。


--  作者:yyzlxc
--  发布时间:2011/9/18 12:59:00
--  
谢谢狐爸的指教,又学了一招,再次感谢狐爸老师!!