以文本方式查看主题 - 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行左右 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分钟,我觉得效率太低了,有什么快速的办法? |
-- 作者:有点蓝 -- 发布时间: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秒. 改写代码获得了巨大成功! 再次感谢有点蓝大师提供的帮助! |