Office中国论坛/Access中国论坛

标题: 如何计算子窗体的合计(包括编辑中的记录) [打印本页]

作者: accben    时间: 2019-8-14 11:40
标题: 如何计算子窗体的合计(包括编辑中的记录)
通常情况下,我们获取子窗体的合计做法如下:
1)在子窗体页脚设置一个文本框:txt合计,写上=sum([数量])
2)在主窗体设置一个文本框:合计,写上=子窗体.form!txt合计
这样,我们就可以获取子窗体的数量合计数。

但大家应该都知道,要正确显示这个主窗体上的数量合计,
在编辑完最后一行的数量时,必须要将焦点移开到正在编辑的行,否则这个显示就不能刷新。

这时,如果我们要将子窗体的数量合计传递到其它窗体,那么传递的这个数量合计就是错误的。

不知各位在开发中是如何处理这个问题的?又是如何解决的?
请各位老师指点指点,谢谢!
作者: accben    时间: 2019-8-14 11:58
举个例子,子窗体如下:
数量
2
3
按上面的描述:
1)如果当前焦点不在3的位置上,这时主窗体的合计数量是5,是正确的。
2)如果我要将3改为13,改完后,焦点还在13这个位置上,这时主窗体的合计数量还是5,并没有刷新为15
但这时,子窗体正确的数量合计是15,而不是5。

作者: accben    时间: 2019-8-14 16:27
解决方法:
通过ADO读取子窗体关联的表,并对数量进行累计,
实测,焦点还在子窗体数量控件编辑,未离开数量焦点,仍可得到正确的累计结果【sl】。

   Dim rsi As Integer
   Dim sl As Integer
   sl = 0
   Dim rssum As New ADODB.Recordset
   rssum.Open "select * from 入库明细临时TAB", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
   rssum.MoveFirst
   For rsi = 1 To rssum.RecordCount
   sl = sl + rssum("数量")
   rssum.MoveNext
   Next rsi

   Msgbox sl

如有更好的方法,希望各位能分享一下,谢谢!
作者: roych    时间: 2019-9-5 22:49
我一般是提交前都不会进行数据验证或者传递。事实上,我所开发的软件中,窗体是不绑定数据源。提交时再绑定将数据源和控件进行绑定并验证。检验数据合法了,再弹出一个确认对话框,即最后确认。
打个不太恰当的比方。
前面操作,就像在平台点外卖一样。
你选择了商家,菜品,点击了“确定”,转移到支付页面。当用户反悔时,还是可以退出页面,并不会付款。
——这一步相当于在窗体里输入了数据。如果不想输入了,随时可以退出录入页面。数据并不会保存到后台
然后点击支付。
——这一步相当于点击提交按钮。这时候,你可以给提示,也可以不提示,直接验证后即提交。但我通常会给一个提示。毕竟有些数据,可能符合验证规则,但不一定是正确的数据。例如,生日的输入框,只要是日期格式就验证了。但它是不是真实的生日呢?假设用户想改怎么办?所以我会考虑给用户最后一次确认机会。


综上。为什么一直没人回答你这个问题,是因为从应用场景来讲,你这个做法并不太符合正常的逻辑,纯属没事找抽型。

你想想,光标一离开文本框,就给对方把数据传递提交上去,也不验证一下。万一用户输错了,想改的话,你打算怎么办?再让用户进入修改页面去修改吗?这样的弥补,不是吃饱了撑的么?



作者: accben    时间: 2019-9-18 15:07
roych 发表于 2019-9-5 22:49
我一般是提交前都不会进行数据验证或者传递。事实上,我所开发的软件中,窗体是不绑定数据源。提交时再绑定 ...

非常感谢roych版的关注!

我有这个想法,就是基于不负责的用户,在输入完数据后,没有将光标移离子窗体正在编辑的行,直接按保存,以致传递出错。

负责的用户,他会将光标移离正在编辑的行,数量合计自动计算完成后,再确认是否正确,如果正确就按保存。

不负责任的用户就会说,你编的系统不行,反正我录入完就立刻点保存了,明细记录也没有错。

因此,才会有此一问。

或者这个问题这样问会更好:如何实时计算子窗体的数量合计?
我用change事件一边录入一边计算,可能是触发事件的先后问题,我尝试失败了,我在论坛也没找到合适的例子。如果能实时计算子窗体的数量合计,这个方案是最完美的。

请问Access能否实现:实时计算子窗体的数量合计?





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3