以文本方式查看主题

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

--  作者:czquickly
--  发布时间:2017/12/23 15:49:00
--  [求助]按条件批量更新列内容
 在dataColChanged写如下代码If e.DataCol.Name = "料件品号" Then
    Dim t As DataTable
    Dim s As String
    Dim t1 As String = E.NewValue
    Dim q As new QueryBuilder
    q.ConnectionName = "ERP"
    q.TableName = "临时"
    q.SelectString =  " Select MV002 AS 采购员 Fro m {INVMB} LEFT JOIN {CMSMV} ON MB067=MV001 WHERE MB001 = \'" & t1 & "\'"
    t = q.Build
    For Each r As DataRow In t.DataRows
        s = s + r("采购员")
    Next
    e.DataRow("采购员") = s
    DataTables.Unload("临时")
End If
实现料件品号变更后,采购员列自动取我们ERP数据库中对应的采购员信息。目前存在的问题就是运行速度太慢,复制几千个料件品号黏贴进狐表后,每秒处理十几行。有其他方法实现类似功能不?或者做个按钮,一下处理全部的行,要怎么实现?麻烦大家了 

--  作者:有点蓝
--  发布时间:2017/12/23 15:59:00
--  
1、如果采购员的数据不多,可以作为查询表一次性加载进来,进行操作,每一行数据都到后台取值是很慢的

2、类似

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.ConnectionName = "ERP"
cmd.CommandText = "Select MV002 AS 采购员 From {INVMB} LEFT JOIN {CMSMV} ON MB067=MV001"
dt = cmd.ExecuteReader()

For Each r As Row In Tables("xxx表").Rows
    r("采购员") = dt.GetComboListString("MB001 = \'" & r("料件品号") & "\'")
Next
[此贴子已经被作者于2017/12/23 16:00:15编辑过]

--  作者:czquickly
--  发布时间:2017/12/23 16:33:00
--  
料件品号信息台多,10万+,所以全部导进的话,速度也慢。最好是只导进表里存在的料件品号对应采购
--  作者:有点蓝
--  发布时间:2017/12/23 16:59:00
--  
不是导入料件品号啊,是导入采购员信息啊,采购员大不了几十上百个?

如果采购员只能通过料件品号才能关联查询,那就没有办法了。不知道你业务逻辑是怎样的,只能从逻辑层面来优化了,不是代码能够解决的