以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]合并数据的时候对比 后台数据 的代码优化~~~  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=20187)

--  作者:gaoyong30000
--  发布时间:2012/5/31 17:54:00
--  [求助]合并数据的时候对比 后台数据 的代码优化~~~

想要实现一个功能 就是考勤表每月都会合并到系统里  形成后台数据

由于并不是每月只合并一次数据  有时候会导入好几次   这就需要筛选掉重复的数据 

 

我的想法是这样的 1.先建立一个临时的 【中转表】  蓝色部分

                        2.然后再合并外来的excel数据    红色部分

3.最后进行匹配重复的数据 在【窗口表】 DataTables("窗口表").AddNew()  用以保存到后台  【窗口表】是select的 后台的【考勤机】表的                

 

Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls" \'设置筛选器
dlg.MultiSelect = False
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    Dim Result As DialogResult
    Result = Messagebox.Show("确定导入数据吗?","提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    If Result = DialogResult.yes Then
        Dim dtb1 As New DataTableBuilder("中转表")
        dtb1.Build()
        DataTables("中转表").Fill("Select * From [考勤机] where [_identify] is null","华泰内控系统-ERP",False)
       
        Dim mg As New Merger
        mg.SourcePath = dlg.filename
        mg.Format = "excel" \'指定格式
        mg.SourceTableName = "Sheet 1$" \'指定要合并的表
        mg.DataTableName = "中转表" \'指定接收数据的表
        mg.Merge() \'开始合并
       
        Dim cmd As New SQLCommand
        Dim dt As DataTable
        cmd.C
        cmd.CommandText = "SELECT * From {考勤机}"
        dt = cmd.ExecuteReader()
        For Each dr As DataRow In DataTables("中转表").DataRows
            If dt.Find("登记号码 = \'" & dr("登记号码") & "\' And 日期= \'" & dr("日期") & "\'") Is Nothing Then
                Dim nr As DataRow = DataTables("窗口表").AddNew()
                For Each dc As DataCol In dt.DataCols
                    nr(dc.name) = dr(dc.name)
                Next
            End If
        Next
        DataTables("窗口表").save
        DataTables.delete("中转表")
    End If
End If

 

总感觉有些复杂  运行慢(由于要建立临时表并逐行匹配) 请问各位  有啥好的办法~~~~~~~~~~~

[此贴子已经被作者于2012-5-31 17:54:56编辑过]

--  作者:mr725
--  发布时间:2012/5/31 20:41:00
--  
用Filter指定合并条件后。直接保存那个 中转表 就可以了。