以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  重置列生成数据  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=175931)

--  作者:rgbjwjb
--  发布时间:2022/3/24 12:22:00
--  重置列生成数据
补助发放\\“补助发放”窗体,当输入“发放日期”后,点击“生成本期工资”后,几乎运行3个小时候才有数据,且部分列没有数据,只有通过重置列后才有,请问代码哪里有问题,请指教如何改正,谢谢!
链接:https://pan.baidu.com/s/1plmgrAmZDQkj4Zu888bjEQ 
提取码:wqsx 

--  作者:有点蓝
--  发布时间:2022/3/24 14:41:00
--  
DataTables("被征地农民基本情况").Select("土地交付日期 <= #" & dt1.value & "#")

假设界面日期填入“2016-06-21”,上面查询后小于这个日期的数据会有28000+条数据,然后datacolchanged事件有差不多13个列要触发计算,每个列触发一次,就会触发28000 X 13 = 364000次,并且有些列计算后还会触发其它列的计算,连锁触发的列数量再乘以364000,可能会达到上百万的触发次数。

首先,上面的查询条件我觉得不合理,不可能每次都把小于这个日期的所有记录都计算一遍,而是应该有一个范围,比如本月,本年...
其次,考虑按钮执行的时候屏蔽datacolchanged表事件,然后把datacolchanged里需要计算的逻辑提取出来放到按钮里处理

--  作者:rgbjwjb
--  发布时间:2022/3/24 22:51:00
--  
根据老师的建议我将上述条件改为:DataTables("被征地农民基本情况").Select("本级补助发放截止日期 <= #" & dt1.value & "#"),(因为只要在发放期内,29000户每月都要发放,我觉得只能这样),我也把datacolchanged里需要计算的逻辑提取出来放到该按钮中处理,但是还是计较慢,不知老师还有没有建议,谢谢!
--  作者:有点蓝
--  发布时间:2022/3/24 23:21:00
--  
也就这这样了。

或者考虑"被征地农民基本情况"在录入数据的时候就计算好相关数据,录入一行就计算一行,不要等到点击按钮再一次性计算

--  作者:rgbjwjb
--  发布时间:2022/3/26 15:38:00
--  
我考虑在“补助发放”窗体中选择“所属期”后(dt1),先筛选掉部分数据:Tables("被征地农民基本情况").Filter ="是否结清=\'未结清\' and 征地时年龄段<>\'四\' and  本级补助截止日期>= #" & dt1.value & "# ";还缺一个筛选条件:从表“参加企业保险明细表”中找到“在保月份<>#" & dt1.value & "#”的农户(用身份证号码相关联),并把这些农户筛选掉(因为只要当月有保险的农户就不需要发放补助),缺的这个筛选条件不知怎么加上去,请老师指教一下,谢谢!
--  作者:有点蓝
--  发布时间:2022/3/26 15:51:00
--  
使用加载处理

dataTables("被征地农民基本情况").loadFilter ="是否结清=\'未结清\' and 征地时年龄段<>\'四\' and  本级补助截止日期>= #" & dt1.value & "# and 身份证号 in(select 身份证号 from 参加企业保险明细表 where 在保月份<>#" & dt1.value & "#)"
dataTables("被征地农民基本情况").load

--  作者:rgbjwjb
--  发布时间:2022/3/27 9:46:00
--  
Tables("被征地农民基本情况").Filter ="是否结清=\'未结清\' and 征地时年龄段<>\'四\' and  本级补助截止日期>= #" & dt1.value & "# and 身份证号 in(select 身份证号 from {参加企业保险明细表} where 在保月份<>#" & dt1.value & "#)"
运行错误:身份证号码后缺操作符。请问怎么处理,谢谢!

--  作者:有点蓝
--  发布时间:2022/3/27 20:24:00
--  
筛选不支持这种用法。只能这样

dim s as string = DataTables("参加企业保险明细表").GetComboListString("身份证号","在保月份<>#" & dt1.value & "#")
Tables("被征地农民基本情况").Filter ="是否结清=\'未结清\' and 征地时年龄段<>\'四\' and  本级补助截止日期>= #" & dt1.value & "# and 身份证号 in (\'" & s.replace("|","\',\'") & "\')"


--  作者:rgbjwjb
--  发布时间:2022/3/29 19:49:00
--  

上述代码是不是我放错了位置,加载条件没起作用,年龄段为“四”的仍然没有过滤掉,请老师帮看下,谢谢!

--  作者:有点蓝
--  发布时间:2022/3/29 20:09:00
--  
请上传实例说明