设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2985|回复: 4
打印 上一主题 下一主题

[窗体] 如何计算子窗体的合计(包括编辑中的记录)

[复制链接]
跳转到指定楼层
1#
发表于 2019-8-14 11:40:07 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
通常情况下,我们获取子窗体的合计做法如下:
1)在子窗体页脚设置一个文本框:txt合计,写上=sum([数量])
2)在主窗体设置一个文本框:合计,写上=子窗体.form!txt合计
这样,我们就可以获取子窗体的数量合计数。

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

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

不知各位在开发中是如何处理这个问题的?又是如何解决的?
请各位老师指点指点,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2019-8-14 11:58:06 | 显示全部楼层
举个例子,子窗体如下:
数量
2
3
按上面的描述:
1)如果当前焦点不在3的位置上,这时主窗体的合计数量是5,是正确的。
2)如果我要将3改为13,改完后,焦点还在13这个位置上,这时主窗体的合计数量还是5,并没有刷新为15
但这时,子窗体正确的数量合计是15,而不是5。
3#
 楼主| 发表于 2019-8-14 16:27:12 | 显示全部楼层
解决方法:
通过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

如有更好的方法,希望各位能分享一下,谢谢!
4#
 楼主| 发表于 2019-9-18 15:07:59 | 显示全部楼层
roych 发表于 2019-9-5 22:49
我一般是提交前都不会进行数据验证或者传递。事实上,我所开发的软件中,窗体是不绑定数据源。提交时再绑定 ...

非常感谢roych版的关注!

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

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

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

因此,才会有此一问。

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

请问Access能否实现:实时计算子窗体的数量合计?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-15 22:48 , Processed in 0.083738 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表