以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]改下代码(重复值排除) (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=136739) |
-- 作者:188802386 -- 发布时间:2019/6/20 11:35:00 -- [求助]改下代码(重复值排除) systemready = False Dim dlg As New OpenFileDialog dlg.Filter = "Excel文件|*.xls;*.xlsx" If dlg.ShowDialog =DialogResult.OK Then Dim t As Table = Tables(eform.name & "_Table1") t.StopRedraw() Dim Book As New XLS.Book(dlg.FileName) Dim Sheet As XLS.Sheet = Book.Sheets(0) For n As Integer = 1 To Sheet.Rows.Count -1 Dim r As DataRow = t.DataTable.Find("统计年月 = \'" & sheet(n, 0).text & "\' and 姓名 = \'" & sheet(n, 1).text &"\'") If r Is Nothing Then r = t.DataTable.AddNew() For i As Integer = 0 To sheet.Cols.Count -1 Dim cname As String = sheet(0, i).text If cname > "" AndAlso t.Cols.Contains(cname) Then r(cname) = sheet(n, i).Text r("确认状态") = "待确认" r.save End If Next Next t.ResumeRedraw() End If systemready = True 以上代码能正常导入数据,但是我想用统计年月和姓名来判断sql数据库中是否有相同的数据,如果有则替换原来的,没有则新增进去。先谢了
|
-- 作者:188802386 -- 发布时间:2019/6/20 11:50:00 -- 或者是先导入进来保存后,再增加一个按钮,功能为 后台寻找统计年月和姓名重复的行,如果状态列内容为已确认,那么删除待确认的行,如果都为待审核状态,那么删除创建日期列时间早的 |
-- 作者:有点甜 -- 发布时间:2019/6/20 11:52:00 -- 弹出这个值看一下
msgbox("统计年月 = \'" & sheet(n, 0).text & "\' and 姓名 = \'" & sheet(n, 1).text &"\'")
|
-- 作者:kylin -- 发布时间:2019/6/20 13:14:00 -- 加一个相同结构的辅助表,加一列判断列,在该表的DataColChanged事件写入查找代码,找到的在判断列做个标记,每次导入后,辅助表中带有标记的,更新到原表中。 [此贴子已经被作者于2019/6/20 13:14:49编辑过]
|
-- 作者:188802386 -- 发布时间:2019/6/20 14:50:00 -- 请问怎么实现导入的数据,确认状态为已确认的就不作替换,是待确认状态就替换呢 |
-- 作者:有点甜 -- 发布时间:2019/6/20 14:53:00 -- 以下是引用188802386在2019/6/20 14:50:00的发言:
请问怎么实现导入的数据,确认状态为已确认的就不作替换,是待确认状态就替换呢
弹出这个值看一下
msgbox("统计年月 = \'" & sheet(n, 0).text & "\' and 姓名 = \'" & sheet(n, 1).text &"\'")
不会做,请上传具体实例测试 |
-- 作者:188802386 -- 发布时间:2019/6/20 15:02:00 -- 这个测试出来了,就是对比了这两列后,如果状态是已确认状态就不作修改,否则就替换原来的数据 |
-- 作者:188802386 -- 发布时间:2019/6/20 15:14:00 -- systemready = False Dim dlg As New OpenFileDialog dlg.Filter = "Excel文件|*.xls;*.xlsx" If dlg.ShowDialog =DialogResult.OK Then Dim t As Table = Tables(eform.name & "_Table1") t.StopRedraw() Dim Book As New XLS.Book(dlg.FileName) Dim Sheet As XLS.Sheet = Book.Sheets(0) For n As Integer = 1 To Sheet.Rows.Count -1 Dim r As DataRow = t.DataTable.Find("统计年月 = \'" & sheet(n, 0).text & "\' and 姓名 = \'" & sheet(n, 4).text &"\'") \'msgbox("统计年月 = \'" & sheet(n, 0).text & "\' and 姓名 = \'" & sheet(n, 1).text &"\'") If r Is Nothing Then r = t.DataTable.AddNew() For i As Integer = 0 To sheet.Cols.Count -1 Dim cname As String = sheet(0, i).text If cname > "" AndAlso t.Cols.Contains(cname) Then If r("确认状态") = "已确认" Then Else r(cname) = sheet(n, i).Text r("确认状态") = "待确认" r.save End If End If Next Next t.ResumeRedraw() End If systemready = True 做出来了
|
-- 作者:188802386 -- 发布时间:2019/6/20 15:52:00 -- 刚刚发现了个大问题,就是只对比加载出来了的数据,请问如何对比sql数据库里面的数据呢 |
-- 作者:有点甜 -- 发布时间:2019/6/20 15:55:00 -- 以下是引用188802386在2019/6/20 15:52:00的发言:
刚刚发现了个大问题,就是只对比加载出来了的数据,请问如何对比sql数据库里面的数据呢
方法一:你可以用sqlFind查找对比(但这种效率很低,执行一行0.5秒左右)
方法二:把数据都加载出来再导入测试 |