以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]临时表怎么更新后台数据 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=142305) |
-- 作者:沪上游客 -- 发布时间:2019/10/23 17:43:00 -- [求助]临时表怎么更新后台数据 老师,您好! 我在窗口中生成一个临时表(与后台数据表结构相同),然后用Excel表数据导入数据到临时表,自动比对临时表与后台对应数据变动的记录(是不是按照列比对?),再更新变动过的数据。 如果全履盖的话,会浪费很多电脑资源。也不合理 我应该怎么做?谢谢老师!
|
-- 作者:有点蓝 -- 发布时间:2019/10/23 17:50:00 -- 查询,然后判断、赋值 For Each dr As DataRow In DataTables("临时表").DataRows dim nr as datarow = DataTables("表A").Find("第二列 = " & dr("第一列")) If nr Isnot Nothing Then 更新变动过的数据 End If Next DataTables("表A").save
|
-- 作者:沪上游客 -- 发布时间:2019/10/25 14:03:00 -- 老师你好! 后台更新是不是用“SQLReplaceFor”每列分别更新,但我的表中有30多个列,会不会速度会很慢,有没有其他的办法? 比如我不用临时表,而用SQLTable表,默认不加载数据,导入后更新。应该怎么写代码? 谢谢老师! [此贴子已经被作者于2019/10/25 14:05:02编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/10/25 14:07:00 -- SQLTable表?那么导入后直接写代码保存就可以了 datatables("窗口1_table1").save
|
-- 作者:沪上游客 -- 发布时间:2019/10/25 14:12:00 -- 老师代码怎么写?应该不能直接保存吧,因为新的记录行主键与相同编号的后台记录行不一样的。 [此贴子已经被作者于2019/10/25 14:13:58编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/10/25 14:14:00 -- SQLTable表肯定可以直接保存,除非不是SQLTable,或者另外使用fill,DataSource更改了表 |
-- 作者:沪上游客 -- 发布时间:2019/10/25 14:58:00 -- 老师我试过了,直接保存会重复新增行 我的代码是: With DataTables("导入核算项目科目组合表_金蝶核算项目科目组合表") .DataRows.Clear() \'清除所有行 End With Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "Excel文件|*.xlsx|Excel文件|*.xls" \'设置筛选器 If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 MessageBox.Show("你选择的是:" & dlg.FileName,"提示") \'提示用户选择的文件 End If Dim Book As New XLS.Book(dlg.FileName) Dim Sheet As XLS.Sheet = Book.Sheets(0) Tables("导入核算项目科目组合表_金蝶核算项目科目组合表").StopRedraw() Dim nms() As String = {"科目名称","安全设施费","办公费用","城市维护建设税","待抵扣进项","待认证进项税金","地方教育费附加","分包成本","福利费","工程材料","工程施工","管理费用","计算抵扣进项","简易计税","建造合同成本","建造合同收成本11","建造合同收成本3","建造合同收入","建造合同收入11","建造合同收入3","教育税费附加","进项税金","进项税金转出","临时设施费","内部往来","其他费用","人工费用","施工机械使用费","水电费","所得税","项目附征个税","销项税额抵减","销项税金","已交税金","印花税","应付账款","应交税费","应交增值税","应收账款","营业税","营业税金及附加","预付账款","预交所得税","预征税金","暂收款","招待费用","折旧费用","职工教育经费","主营业务成本","主营业务收入","总部往来"} For n As Integer = 1 To Sheet.Rows.Count -1 Dim bh As String = sheet(n,0).Text Dim dr As DataRow = DataTables("导入核算项目科目组合表_金蝶核算项目科目组合表").Find("科目名称 = \'" & bh & "\'") If dr Is Nothing Then \'如果不存在同编号的订单 dr = DataTables("导入核算项目科目组合表_金蝶核算项目科目组合表").AddNew() End If For m As Integer = 0 To nms.Length - 1 dr(nms(m)) = Sheet(n,m).Value Next Next Tables("导入核算项目科目组合表_金蝶核算项目科目组合表").ResumeRedraw() DataTables("核算项目科目组合表").DataCols("科目名称").RaiseDataColChanged() Dim dt As DataTable = DataTables("导入核算项目科目组合表_金蝶核算项目科目组合表") For Each dr As DataRow In dt.DataRows If dr.RowState = DataRowState.Modified AndAlso dr.IsNull("更新记录_更新日期") OrElse dr("更新记录_更新日期") < Date.Now Then dr("更新记录_更新日期") = Date.Now \'dr("更新记录_更新时间") = Format(Date.Now,"HH:mm:ss") dr("更新记录_更新人") = User.Name End If Next DataTables("导入核算项目科目组合表_金蝶核算项目科目组合表").Save() DataTables("导入核算项目科目组合表_金蝶核算项目科目组合表").AllowEdit = False [此贴子已经被作者于2019/10/25 15:00:19编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/10/25 15:03:00 -- 11 [此贴子已经被作者于2019/10/25 15:13:35编辑过]
|
-- 作者:沪上游客 -- 发布时间:2019/10/25 15:09:00 -- 另外 dr("更新记录_更新时间") = Format(Date.Now,"t") 这段代码在SQLTable 中执行会出错 后来改为 dr("更新记录_更新时间") = Format(Date.Now,"HH:mm:ss") 也同样出错,应该怎么写?
|
-- 作者:有点蓝 -- 发布时间:2019/10/25 15:17:00 -- 如果想要和后台数据比较不重复,需要使用sqlfind Dim dr As DataRow = DataTables("导入核算项目科目组合表_金蝶核算项目科目组合表").SQLFind("科目名称 = \'" & bh & "\'") 更新时间如果是日期型的列,直接赋值就可以了 dr("更新记录_更新时间") = Date.Now 如果要忽略日期部分,可以这样 dr("更新记录_更新时间") = Format(Date.Now,"0001-01-01 HH:mm:ss")
|