以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]自动获取数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=150403)

--  作者:huangjiacai
--  发布时间:2020/5/29 9:11:00
--  [求助]自动获取数据
是这样的,有一个“申请表”、“汇总表”,通过唯一编号建立关联,在“申请表”输入数据的时候,通过查询“汇总表”中的编号自动填充部分列的内容,之前一开始功能是实现的了,期间代码没有修改过,但是这几天发现功能突然失效了,数据对不上,具体看图可以了解,麻烦解答一下,谢谢。
图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

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

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

--  作者:有点蓝
--  发布时间:2020/5/29 9:30:00
--  
代码在哪个表什么事件?贴出完整代码!

申请表同一个单号是不是有多条数据?

--  作者:huangjiacai
--  发布时间:2020/5/29 10:57:00
--  

代码在“申请表”啊,根据申请表“编号”列当前行内容的变化去查找“汇总表”的编号,再填入对应的信息,表单输入信息是一对一的

With Tables("预算使用申请表").Current
    \'    Dim r As Row = Tables("预算使用申请表").Current
    If .IsNull("预算编号") = False Then
        Dim r As Row = Tables("预算使用申请表").Current
        \'        Dim dr As DataRow
        Dim dr1 As DataRow
        \'        dr = DataTables("基础预算表").Find("[预算编号] = \'" & Tables("预算使用申请表").Current("预算编号") & "\'")
        \'        If dr IsNot Nothing Then
        \'            r("预算项目名称") = dr("项目名称")
        \'            r("预算金额") = dr("预算金额")
        \'            r("一级科目") = dr("一级科目")
        \'            r("二级科目") = dr("二级科目")
        \'            r("三级科目") = dr("三级科目")
        \'            r("四级科目") = dr("四级科目")
        \'            r("五级科目") = dr("五级科目")
        \'            r("预算使用说明") = dr("预算使用说明")
        \'        End If
        dr1 = DataTables("预算使用情况汇总表").Find("[预算编号] = \'" & Tables("预算使用申请表").Current("预算编号") & "\'")
        If dr1 IsNot Nothing Then
            r("已使用金额") = dr1("预算发生数")
            r("已使用占比") = dr1("预算完成率")
            r("预算余额") = dr1("预算余额")
        End If
    End If
    \'    If .IsNull("结算金额") = True Then
    \'        e.DataRow.Locked = True
    \'    End If
   
    \'   If .IsNull("请示金额") = False Then
    \'      Dim r1 As Row = Tables("预算使用申请表").Current
    \'     Dim dr1 As DataRow
    \'    dr1 = DataTables("预算使用情况汇总表").Find("[预算编号] = \'" & Tables("预算使用申请表").Current("预算编号") & "\'")
    \'   r1("预算余额") = dr1("预算余额")
    \' End If
End With
\'Select e.DataCol.Name
\'     Case  "预算编号"
\'          If e.DataRow.IsNull("预算编号") Then
\'             e.DataRow("申请编号") = Nothing
\'         Else
\'             Dim lb As  String = e.DataRow("预算编号")
\'             If e.DataRow("申请编号").StartsWith(lb) = False  \'如果单据编号前缀不符
\'                Dim max  As  String
\'                 Dim idx  As  Integer
\'                max = e.DataTable.Compute("Max(申请编号)","预算编号 = \'" & lb  & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
\'                If max > ""  Then  \'如果存在最大编号
\'                    idx = CInt(max.Substring(2,3)) + 1  \'获得最大编号的后三位顺序号,并加1
\'                 Else
\'                     idx = 1  \'否则顺序号等于1
\'                 End  If
\'                 e.DataRow("申请编号") = lb & Format(idx,"000") & "SQ"
\'             End If
\'         End  If
\' End  Select
Select Case e.DataCol.Name
    Case "预算编号"
        Dim dr As DataRow
        dr = DataTables("基础预算表").Find("[预算编号] = \'" & e.DataRow("预算编号") & "\'")
        If dr IsNot Nothing Then
            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 Select
If e.DataCol.Name = "申请部门" Then
    If e.DataRow.IsNull("申请部门") Then
        e.DataRow("申请编号") = Nothing
    Else
        If e.DataRow.IsNull("申请日期") Then
            MessageBox.Show("请输入日期并重新填写部门!","提 示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        Else
            Dim bh As String = Format(e.DataRow("申请日期"),"yyyyMMdd") \'取得编号的8位前缀
            Dim bm As String = e.DataRow("申请部门")
            If e.DataRow("申请编号").StartsWith(bh) = False \'如果编号 的前8位不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.SQLCompute("Max(申请编号)","申请日期  = \'" & e.DataRow("申请日期") & "\' And [_Identify] <> " & e.DataRow ("_Identify")) \'取得该天的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(9,3)) + 1 \'获得最大编号的 后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                Select Case bm
                    Case "收费管理部"
                        bm = "01"
                    Case "综合事务部"
                        bm = "02"
                    Case "党群监审(人力)部"
                        bm = "03"
                    Case "养护工程部"
                        bm = "04"
                    Case "财务管理部"
                        bm = "05"
                    Case "路政管理部"
                        bm = "06"
                    Case Else
                        bm = "07"
                End Select
                e.DataRow("申请编号") = bh & "-" & Format(idx,"000") &  bm & "SQ"
                e.DataRow.save
            End If
        End If
    End If
End If


--  作者:有点蓝
--  发布时间:2020/5/29 11:23:00
--  
不要在datacolchanged事件里使用current这种用法,如果要去当前行,使用e.DataRow

Select Case e.DataCol.Name

    Case "预算编号"
if e.DataRow.isnull("预算编号") = false
        Dim dr As DataRow
        dr = DataTables("基础预算表").Find("[预算编号] = \'" & e.DataRow("预算编号") & "\'")
        If dr IsNot Nothing Then
            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

       dr = DataTables("预算使用情况汇总表").Find("[预算编号] = \'" & e.DataRow("预算编号") & "\'")
        If dr IsNot Nothing Then
            r("已使用金额") = dr("预算发生数")
            r("已使用占比") = dr("预算完成率")
            r("预算余额") = dr("预算余额")
        End If
end if
End Select