Foxtable(狐表)用户栏目专家坐堂 → 查表赋值有没有快速的办法?


  共有3796人关注过本帖树形打印复制链接

主题:查表赋值有没有快速的办法?

帅哥哟,离线,有人找我吗?
sloyy
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2193 积分:13908 威望:0 精华:2 注册:2012/2/25 10:59:00
查表赋值有没有快速的办法?  发帖心情 Post By: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
图片点击可在新窗口打开查看




 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110810 积分:563988 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2193 积分:13908 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By: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秒. 改写代码获得了巨大成功!

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



 回到顶部