以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何不导入重复的值?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=150733)

--  作者:天宇科技
--  发布时间:2020/6/5 19:56:00
--  如何不导入重复的值?

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20200605195204.png
图片点击可在新窗口打开查看
在导入按钮中,我写了如下代码,可以导入数据,但存在一个问题,就是可以重复导入数据,我想在导入前能做一个提醒,如果  “绩效明细”  表里和准备导入的  “设置”  表的数据(以姓名为例)有重复,就提示有重复数据,禁止导入,如果没有重复数据,就执行我写的导入代码。


Tables("绩效明细").StopRedraw

For Each r As Row In Tables("设置").GetCheckedRows
Dim r1 As Row = Tables("绩效明细").AddNew
r1("姓名") = r("姓名")
Next
Tables("绩效明细").ResumeRedraw
If MessageBox.Show("你已导入人员信息,请开始计算绩效工资","提示",MessageBoxButtons.OK,MessageBoxIcon.None) = DialogResult.OK Then

DataTables("绩效明细").DataCols("姓名").RaiseDataColChanged()
DataTables("绩效明细").DataCols("姓名").RaiseDataColChanged()
Forms("导入窗口").Close
End If


--  作者:天宇科技
--  发布时间:2020/6/6 8:50:00
--  
蓝版,指点下。
--  作者:有点蓝
--  发布时间:2020/6/6 8:53:00
--  
Tables("绩效明细").StopRedraw
Dim str As String = ""
For Each r As Row In Tables("设置").GetCheckedRows
    str = str & ",\'" & r("姓名") & "\'"
Next
str = str.Trim(",")
If DataTables("绩效明细").Find("姓名 in (" & str & ")") IsNot Nothing Then
    MessageBox.Show("有重复")
    Return
End If

For Each r As Row In Tables("设置").GetCheckedRows
    Dim r1 As Row = Tables("绩效明细").AddNew
    r1("姓名") = r("姓名")
Next
Tables("绩效明细").ResumeRedraw
If MessageBox.Show("你已导入人员信息,请开始计算绩效工资","提示",MessageBoxButtons.OK,MessageBoxIcon.None) = DialogResult.OK Then
    
    DataTables("绩效明细").DataCols("姓名").RaiseDataColChanged()
    DataTables("绩效明细").DataCols("姓名").RaiseDataColChanged()
    Forms("导入窗口").Close
End If

--  作者:天宇科技
--  发布时间:2020/6/6 8:58:00
--  
语法错误: IN 关键字后面必须是由逗号分隔的非空表达式列表,并且必须用括号括起来。
--  作者:天宇科技
--  发布时间:2020/6/6 9:24:00
--  
假如我一列行也没有选中的话,按导入数据按钮,就会提示  语法错误: IN 关键字后面必须是由逗号分隔的非空表达式列表,并且必须用括号括起来。
如果选中数据了,不提示错误。

--  作者:天宇科技
--  发布时间:2020/6/6 10:16:00
--  
蓝版,再帮我看下。
--  作者:有点蓝
--  发布时间:2020/6/6 10:31:00
--  
既然知道问题在哪,那就加一个判断呀,判断有没有选中
--  作者:天宇科技
--  发布时间:2020/6/6 12:12:00
--  
这样行吗?蓝怎么

Tables("绩效明细").StopRedraw

If Tables("设置").GetCheckedRows.count = 0 Then
    MessageBox.Show("请选中要导入的行,再导入数据","温馨提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
Else
    Dim str As String = ""
    For Each r As Row In Tables("设置").GetCheckedRows
        str = str & ",\'" & r("姓名") & "\'"
    Next
    str = str.Trim(",")
    If DataTables("绩效明细").Find("姓名 in (" & str & ")") IsNot Nothing Then
        MessageBox.Show("导入数据重复,请核对!","温馨提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
        Return
    End If
End If

For Each r As Row In Tables("设置").GetCheckedRows
    Dim r1 As Row = Tables("绩效明细").AddNew
    r1("姓名") = r("姓名")
Next
Tables("绩效明细").ResumeRedraw
If MessageBox.Show("你已导入人员信息,请开始计算绩效工资","提示",MessageBoxButtons.OK,MessageBoxIcon.None) = DialogResult.OK Then
    
    DataTables("绩效明细").DataCols("姓名").RaiseDataColChanged()
    DataTables("绩效明细").DataCols("姓名").RaiseDataColChanged()
    Forms("导入窗口").Close
End If


--  作者:有点蓝
--  发布时间:2020/6/6 14:15:00
--  
这样取一次集合即可

dim rs as List(of row) = Tables("设置").GetCheckedRows

If rs.count = 0 Then
    MessageBox.Show("请选中要导入的行,再导入数据","温馨提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
Else
    Dim str As String = ""
    For Each r As Row In rs
        str = str & ",\'" & r("姓名") & "\'"
    Next
    str = str.Trim(",")
    If DataTables("绩效明细").Find("姓名 in (" & str & ")") IsNot Nothing Then
        MessageBox.Show("导入数据重复,请核对!","温馨提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
        Return
    End If
End If