以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求助老师  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=105996)

--  作者:sgkyzfh
--  发布时间:2017/8/30 21:14:00
--  求助老师
老师:我有一个项目,其中有两个表,即:《检测历史记录表》和《隐患登记表》,我想实现这样一个功能,就是从《检测历史记录表》里录入数据,当“自动生成隐患”列为真时,就在《隐患登记表》里增加一个相同的记录。这个功能我已经实现了。                                                         但我又设计了一个程序放在了《隐患登记表》的DataColchanged数据事件里,其目的就是想对来自《检测历史记录表》的数据进行判断,当《隐患登记表》的数据里有相同的数据时,就禁止形成新的数据记录,同时还要删除《检测历史记录》的对应数据。目前这个功能实现不了。请老师指正。登录密码:111

--  作者:sgkyzfh
--  发布时间:2017/8/30 21:25:00
--  测试附件
测试附件
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者:有点甜
--  发布时间:2017/8/30 21:26:00
--  

 先判断,再决定是否新增

 

If e.DataCol.Name = "逻辑列名" AndAlso e.DataRow("逻辑列名") = True Then
    Dim dr As DataRow = DataTables("表B").Find("某列 = \'" & e.DataRow("某列") & "\'")
    If dr Is Nothing Then dr = DataTables("表B").AddNew
    For Each dc As DataCol In DataTables("表B").DataCols
        dr(dc.Name) = e.DataRow(dc.Name)
    Next
End If


--  作者:有点甜
--  发布时间:2017/8/30 21:37:00
--  

比如,检测历史记录表DataColChanged事件,写代码

 

If e.DataCol.Name = "自动生成" AndAlso e.DataRow("自动生成") = True Then
    Dim dr As DataRow = DataTables("隐患登记表").Find("车号 = \'" & e.DataRow("车号") & "\' and 日期 = #" & e.DataRow("检查日期") & "#")
    If dr Is Nothing Then dr = DataTables("隐患登记表").AddNew
    Dim nma() As String = {"车号","受控名称","检查日期"} \'A表数据来源列
    Dim nmb() As String = {"车号","隐患部位","日期"} \'B表数据接收列
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = e.DataRow(nma(i))
    Next
End If


--  作者:sgkyzfh
--  发布时间:2017/8/30 21:57:00
--  
老师我发的测试附件错误了,很抱
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

歉,我重新发一次,你在费心给看看一看
--  作者:有点甜
--  发布时间:2017/8/30 22:10:00
--  

Select Case e.DataCol.name
    Case "车号","点位","描述","点检组归档"
        Dim dr As DataRow = e.DataRow     \'将上述车号/点位/描述/点检组归档的值赋给dr变量.
        If e.DataRow("点检组归档")=Nothing Then  \'如果点检组归档为空时
            If dr.IsNull("车号") = False AndAlso dr.IsNull("点位") = False AndAlso dr.IsNull("描述") = False AndAlso dr.IsNull("点检组归档")= False Then \'如果左侧列都不为空.
                If e.DataTable.Compute("Count([_Identify])","车号 = \'" & dr("车号") & "\'And 点位 = \'" & dr("点位") & "\' And 描述 = \'" & dr("描述") & "\' And 点检组归档= \'" & dr("点检组归档") & "\'") > 1 Then
                   
                    MessageBox.Show("相同记录已经存在!不准重复录入","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)

                    DataTables("检测历史记录").deletefor("车号 = \'" & dr("车号") & "\'And 点位 = \'" & dr("点位") & "\' And 描述 = \'" & dr("描述") & "\' And 点检组归档= \'" & dr("点检组归档") & "\'")
                    e.DataRow.Delete  \'删除当前准备录入的行                   
                End If
            End If
        End If
End Select


--  作者:sgkyzfh
--  发布时间:2017/8/31 20:07:00
--  
谢谢老师点拨,很好用。