以文本方式查看主题

-  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=165300)

--  作者:zhuoziwang
--  发布时间:2021/5/13 9:57:00
--  请教自动复制行的问题
请教狐爸,我做了一个按钮,实现跨表自动复制行的功能。就是把表A的内容,自动复制到表B。如果我想做个判别,如果已经复制过,不再重复复制,该怎么做?

Dim Result As DialogResult
Result = MessageBox.Show("确定要存档吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    MessageBox.Show("切记,存档操作只可执行一次.","提示")
Dim f As New Filler
f.SourceTable = DataTables("工资总表") \'指定数据
f.SourceCols = "姓名ID,姓名,部门,备注,计薪年月,病假,事假扣除,岗位工资,年功,加班费,绩效工资,卫生费,行车补贴,艰边津贴,中夜班补助,应发总额,交通补贴,养老保险,医疗保险,失业保险,住房公积金,本月所得税,水电房租,扣款总额,实发工资,通讯补贴,奖金,生育假,罚款,其他补贴" \'指定数据来源列
f.DataTable = DataTables("工资总表存档") \'指定数据接收表
f.DataCols = "姓名ID,姓名,部门,备注,计薪年月,病假,事假,岗位工资,年功,加班费,绩效工资,卫生费,行车补贴,艰边津贴,中夜班补助,应发总额,交通补贴,养老保险,医疗保险,失业保险,住房公积金,本月所得税,水电房租,扣款总额,实发工资,通讯补贴,奖金,生育假,罚款,其他补贴" \'指定数据接收列
f.Fill() \'
Else
    MessageBox.Show("再检查一下吧.","提示")
End If

也就是说:我已经存档过一次,不能重复存档,怎么做判别?

--  作者:zhuoziwang
--  发布时间:2021/5/13 10:00:00
--  
比如“工资总表存档”已经有了某员工5月份工资,重复复制时,就判别已存在相同行,禁止复制
--  作者:有点蓝
--  发布时间:2021/5/13 10:02:00
--  
换种方式填充:http://www.foxtable.com/webhelp/topics/1533.htm

直接使用find查询一下是否有记录,比如:
Dim Cols1() As String = {"来源列一","来源列二","来源列三"}
Dim 
Cols2() As String = {"接收列一","接收列二","接收列三"}
For Each 
dr1 As DataRow In DataTables("表A").Select("[金额] > 100")
    Dim dr2 As DataRow = DataTables("表B").find("编号=\'" & dr1("编号") & "\'")
if dr2 is nothing then
    
dr2 = DataTables("表B").AddNew()
    For 
i As Integer = 0 To Cols1.Length -1
        
dr2(Cols2(i)) = dr1(Cols1(i
))
    Next
end if
Next

--  作者:zhuoziwang
--  发布时间:2021/5/13 10:26:00
--  
蓝总,如果我想实现,重复复制就提醒我这种功能呢?

比如:利用姓名和月份做判别条件,如果数据接收表已经存在相同姓名和月份的行,就提醒,“禁止重复存档”

--  作者:有点蓝
--  发布时间:2021/5/13 10:29:00
--  
Dim Cols1() As String = {"来源列一","来源列二","来源列三"}
Dim 
Cols2() As String = {"接收列一","接收列二","接收列三"}
For Each 
dr1 As DataRow In DataTables("表A").Select("[金额] > 100")
    Dim dr2 As DataRow = DataTables("表B").find("姓名=\'" & dr1("姓名") & "\' and 月份=\'" & dr1("月份") & "\'")
if dr2 is nothing then
    
dr2 = DataTables("表B").AddNew()
    For 
i As Integer = 0 To Cols1.Length -1
        
dr2(Cols2(i)) = dr1(Cols1(i
))
    Next
else
msgbox("禁止重复存档")
end if
Next

--  作者:zhuoziwang
--  发布时间:2021/5/13 10:55:00
--  
解决了,谢谢蓝总