以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  查表赋值有没有快速的办法?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=146330)

--  作者:sloyy
--  发布时间:2020/2/21 16:15:00
--  查表赋值有没有快速的办法?
我有一表格,需要根据参数表查表赋值,参数表表格如下:大概有260行左右

图片点击可在新窗口打开查看此主题相关图片如下:搜狗截图20200221155524.png
图片点击可在新窗口打开查看

For Each r As Row In Tables("导入预算表").rows
Tables("特征码参数表格").filter="资金性质代码 like \'%" & r("资金性质代码") & "%\' and 支出类别代码 like \'%" & r("支出类别代码") & "%\' and (预算来源代码is null or 预算来源代码= \'" & r("预算来源") & "\') and (支出结构代码 is null or 支出结构代码 = \'" & r("支出结构代码") & "\')"

           r("特征码")= Tables("特征码参数表格").Current("预算号特征码")

next

现在我用循环的方式,给3000条记录,根据参数表4个代码的值,查出特征码,填入记录,用了大概9分钟,我觉得效率太低了,有什么快速的办法?

图片点击可在新窗口打开查看此主题相关图片如下:搜狗截图20200221155508.png
图片点击可在新窗口打开查看




--  作者:有点蓝
--  发布时间:2020/2/21 16:41:00
--  
For Each r As Row In Tables("导入预算表").rows
dim dr  as datarow = dataTables("特征码参数表格").find("资金性质代码 like \'%" & r("资金性质代码") & "%\' and 支出类别代码 like \'%" & r("支出类别代码") & "%\' and (预算来源代码is null or 预算来源代码= \'" & r("预算来源") & "\') and (支出结构代码 is null or 支出结构代码 = \'" & r("支出结构代码") & "\')")
if dr isnot nothing then
           r("特征码")= dr("预算号特征码")
end if
next


--  作者:sloyy
--  发布时间:2020/2/23 22:21:00
--  
非常感谢有点蓝大师提供的思路,果然是帮助中提到的问题::http://www.foxtable.com/webhelp/topics/2225.htm
1、用For语句遍历某个表。
2、遍历过程中会用Find或Select查询此表,或者用Compute方法统计此表。
3、遍历过程中会大量修改此表中某些行的值,被修改的行数越多,对于性能影响越大,如果被修改的行数很少,则几乎没有影响。

我用2万条语句测试,用原来的代码:查询赋值在同一个循环,用时:28分钟,保存用datatables的save方法,用了12分钟(2M带宽,阿里云4核云服务器),共计40分钟
改写代码后,把查询和赋值分开在不同的循环,保存用自定义SQL提取函数保存方法,查询和赋值用了2分58秒,保存用了9秒. 改写代码获得了巨大成功!

再次感谢有点蓝大师提供的帮助!