以文本方式查看主题

-  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
--  
查询,然后判断、赋值

Dim
 v As Boolean
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")