以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  怎么实现数据在新增前先进行有无记录判断,如果有 及更新 如果无就新增……  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=184804)

--  作者:cnsjroom
--  发布时间:2023/1/4 12:20:00
--  怎么实现数据在新增前先进行有无记录判断,如果有 及更新 如果无就新增……

怎么实现数据在新增前先进行有无记录判断,如果有 及更新   如果无就新增……

当前运行效果:红色部分代码如果取消注释   直接不新增数据,如果注释掉,会一直新增数据

想实现:当干部年度考核表中 不存在姓名时,直接新增,如果存在姓名时,直接更新对应的数据

 

当前代码如下:【烦请老师们指导下,在能够实现上述预期功能的前提下,并看看这个代码如何简化一些】

Dim cmd As New SQ L Command
cmd.Connect ion Name = "主数据源"
Dim dt,dt1,dt2,dt3 As DataTable
cmd.CommandText = "SEL ECT * From {干部台账}"
dt = cmd.ExecuteReader()
cmd.CommandText = "SEL ECT * From {干部年度考核}"
dt1 = cmd.ExecuteReader(True)
cmd.CommandText = "SEL ECT * From {干部平时考核登记表}"
dt2 = cmd.ExecuteReader()
cmd.CommandText = "SEL ECT * From {干部培训台账}"
dt3 = cmd.ExecuteReader()
Dim Products As List(Of String)
Products = dt.GetValues("考核类型","考核类型<>\'\'")
For Each Product As String In Products
    Output.Show(Product)
    Dim Products1 As List(Of String())
    Products1 = dt.GetValues("姓名|职务|职级|性别|出生年月|入党时间|任现职时间|从事或分管工作","考核类型=\'"& Product &"\' and 职级 like \'%员%\'")
    For Each Product1 As String() In Products1
        Output.Show(Product1(0)&Product1(1)&Product1(2))
        Dim dr  As  DataRow
        dr=dt.SQLFind("姓名=\'"& Product1(0)&"\'")
        output.show(dr("姓名"))
        If  dr IsNot Nothing  Then
        \'Else

            dr =dt1.AddNew
            dr("年度")="2022"
            dr("guid")=System.Guid.NewGuid().ToString()
            dr("姓名")=Product1(0)
            dr("单位及职务")=Product1(1)
            dr("职级")=Product1(2)
            dr("性别")=Product1(3)
            dr("出生年月")=Product1(4)
            If Product1(5)<> "" Then
                dr("政治面貌")="中共党员"
            End If
            dr("任现职时间")=Product1(6)
            dr("从事或分管工作")=Product1(7)
            Dim Products3 As List(Of String())
            Products3 = dt1.GetValues("姓名|年度","姓名=\'"& Product1(0) &"\' and 年度<>\'\' ")
            For Each Product3 As String() In Products3
                \'Output.Show(Product3(0) & Product3(1) )
                Dim Products2 As List(Of String())
                Products2 = dt2.GetValues("姓名|年份|季度|考核结果","姓名=\'"& Product3(0) &"\' and 年份=\'"& Product3(1) &"\' ")
                For Each Product2 As String() In Products2
                    dr("平时考核结果") &=Product2(1) & "年" & Product2(2) & "季度考核结果为" & Product2(3) & ";"
                    \'Output.Show(dr("平时考核结果"))
                Next
                Dim Products4 As List(Of String())
                Products4 = dt3.GetValues("姓名|培训开始日期|培训结束日期|培训主办单位|培训内容","姓名=\'"& Product3(0) &"\' and 年份=\'"& Product3(1) &"\' ")
                For Each Product4 As String() In Products4
                    dr("参加脱产培训情况") &=Product4(1) & "至" & Product4(2) & "参加由" & Product4(3) & "举办的" & Product4(4) & ";"
                    \'Output.Show(dr("参加脱产培训情况"))
                Next
            Next
            dr.save
        End If
    Next
Next


--  作者:有点蓝
--  发布时间:2023/1/4 13:31:00
--  
直接使用SQL取不存在姓名的数据,比如

SELECT a.* From {干部台账} as a where not exists(select 姓名 from  {干部年度考核} as b where a.考核类型=b.考核类型 and a.姓名=b.姓名 and 职级 like \'%员%\'
[此贴子已经被作者于2023/1/4 15:23:08编辑过]

--  作者:cnsjroom
--  发布时间:2023/1/4 14:50:00
--  回复:(有点蓝)直接使用SQL取不存在姓名的数据,比如...

这个操作不熟练呢 

对于楼上的代码  怎么先实现预定功能呢?


--  作者:有点蓝
--  发布时间:2023/1/4 14:53:00
--  
不熟练就学。不使用sql的话,代码没有什么优化的余地了
--  作者:cnsjroom
--  发布时间:2023/1/4 15:17:00
--  回复:(有点蓝)不熟练就学。不使用sql的话,代码没有...

好的 谢谢老师   我学习一下   然后不明白的地方再请教老师

[此贴子已经被作者于2023/1/4 15:20:02编辑过]