设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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


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

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


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

非常感谢roych版的关注!

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

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

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

因此,才会有此一问。

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

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

本版积分规则

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

GMT+8, 2024-11-25 06:28 , Processed in 0.091976 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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