Office中国论坛/Access中国论坛

标题: 数据较多时,如何在窗体上实时累加。 [打印本页]

作者: fatmingli    时间: 2016-8-11 20:09
标题: 数据较多时,如何在窗体上实时累加。
本帖最后由 fatmingli 于 2016-8-12 08:36 编辑

窗体1的数据来源是表1, Text3的控件来源是 =Format(Sum([数量]),"#.##"),表1只有5条数据,运行查询时,窗体的 Text3和弹出的对话框均可以准确显示累计数量420

窗体2的数据来源是表2,Text3的控件来源是 =Format(Sum([数量]),"#.##"),有72条数据,运行同样的查询时,窗体的 Text3和弹出的对话框都没有显示累计数量,按下对话框后的确定按钮后, Text3才正确显示累计数量5220,请问怎么处理才可以在大量数据的情况可以Text3的值赋给变量P。

不好意思,忘记上传数据库了,请大家帮忙,谢谢


作者: wzl8007    时间: 2016-8-11 21:24
根本就不是问题吧
作者: roych    时间: 2016-8-11 21:39
这是数据刷新的问题吧?解决方法如下(任选一):
1、以子窗体所引用的数据源为源,创建一个分组合计查询。拖到主窗体上,生成合计的子窗体。点击查询时同时刷新两个子窗体。
2、在子窗体上的页脚上创建一个控件,用sum统计,如你的表所示,点击查询时同时刷新该控件,然后引用即可。
作者: fatmingli    时间: 2016-8-12 08:41
三楼的兄弟,昨天忘记上传附件了,我的库是没有子窗体,请帮忙看一下数据库,我想达到的目的是把窗体上Text3的值赋给变量P,当表数据量少的时候运行正常,数据量稍大时就不行,感觉好像Text3计算稍微慢了一点,还没计算出结果就开始赋值,所以最后赋给P的不是Text3的计算结算,而是空值,请帮忙修改一下数据 库,谢谢
作者: roych    时间: 2016-8-12 10:28
更改数据源时会又一个重新计算过程的。当计算过程未完成时读取控件值,当然是空的了。——这也就是你所说的“不实时”。
因此需要给以时间控件,等待完成计算过程再读取。
解决方法很简单,那就是更改数据源后及时计算控件值,需要的时候再显示。所以这里在组合框的更改事件中加上计算语句即可。当点击按钮时,这个时间差足够更新控件值了。
[attach]59756[/attach]
作者: fatmingli    时间: 2016-8-12 11:04
本帖最后由 fatmingli 于 2016-8-12 11:15 编辑

Private Sub Text2_Change()
    Me.Requery
End Sub
Private Sub 查询_Click()
    MsgBox "累计数量是" & Me.Text3 & ""
End Sub
你通过2个事件分了两个过程,那肯定没问题,请问如何在一个按钮的单击事件完成呢,因为我需要这样做,下面是我的部分代码

Dim AA As String
Me.Text2.RowSource = "SELECT DISTINCT 名称 FROM            "
DoCmd.SetWarnings False
Dim rs As DAO.Recordset     'SQL语句的值不能直接赋值给变量的,要引用ADO 或DAO,
Set rs = CurrentDb.OpenRecordset("select count(*) as AA from (select d
AA = rs("AA")
For K = 0 To AA - 1
Me.Text2 = Me.[Text2].[ItemData](K)     '更改数据Text2的值
Me.Requery                                    '刷新数据,目的同时刷新
Text3的值,但实际效果是来不及计算,Text3为空
N1 = DCount("[剩余            >0")   'N1表示卖空次数

If N1 = 0 Then       '=0 表示从没卖空过
'Text13 = "A1=" & Text4 & ",B1=;"
P = Text3    实际效果是Text3来不及计算,Text3为空,导致赋值给变量P时也为空
Text13 = "A1=" & Text4 & ",B1=,P1=" & P & ""
.……
DoCmd.RunSQL "insert into   Text13
.……
Next K
作者: roych    时间: 2016-8-12 13:32
1、恭喜你已经跳进坑里了。如果逻辑不改,流程不改,那就不妨继续留在坑里吧。
2、循环语句只能返回最后一个数,也就是Me.[Text2].[ItemData](AA-1) 。
3、如果需要使用循环,应该建立一个变量来存储数据,而不是赋值到文本框。

作者: fatmingli    时间: 2016-8-12 14:46
此路原来真的是行不通吗,我以为是自己水平不行,看来是走错路了

如果定义变量的话,P=Dsum("数量","表","where一大堆条件语句"),
Text3的控件来源是 =Sum([数量]),变量P = Text3,以为这样最简单,不用在写一大堆VB,看来只能写啦
谢谢 楼上耐心的帮助。




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