Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 同城交流

子窗体合计的计算

时 间:2018-01-29 16:16:22
作 者:半夜罗   ID:36948  城市:成都
摘 要:子窗体合计显示
正 文:

输入数据时为了及时反应子窗体的合计,虽然可以用简单的方法,但速度不太让人满意,为此我采用了ADO的方式,写了一个自定义函数,只要有数量、单价,就会即时计算出金额与合计金额,速度非常满意。而且在删除时自动修改行号。正式表不是不需要存储金额字段的,但临时表中必须要设一个金额字段。有了这个函数只需在数量、单价的更新后事件中  =批量填充金额(),和子窗体的确认删除后事件  =批量填充金额() 即可。删除某一行后,行号自动重新填充编号,合计金额也自动重新计算。
我根本不懂英语,所以写的代码基本都是用中文,有时也在中文前加一个字母,管他的,只要能得到结果,只要能看懂,又不是必须英文,将就吧。
在修改时的加载事件中同样  =批量填充金额()
更新后事件已经在相应的文本框中有了,不需要在窗体的更新后事件中再重复。
Public Function dm批量填充金额()
'--------------------------------------------定义记录集
    Dim rst As Object
    Dim strSQL As String
    '----------------------------------------定义序号与合计金额的变量
    Dim i序号 As Currency
    Dim Sum金额 As Currency
    '----------------------------------------如果临时表中没有数据时,退出
    If DCount("*", "入库单销售单明细临时表") = 0 Then Exit Function
    '----------------------------------------打开记录集
    strSQL = "select * from 入库单销售单明细临时表 "
    Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
    '----------------------------------------'如果当前处理未保存状态,先进行保存
    If Me.Dirty Then Me.Dirty = False
    '-----------------------------------------给变量设定初始值
    i序号 = 0 And Sum金额 = 0
    '-----------------------------------------从第一条记录开始
    rst.MoveFirst
    '-----------------------------------------循环进行
    Do Until rst.EOF
        '-------------------------------------允许修改
        rst.Edit
        '-------------------------------------修改各字段的值,这里是序号与金额
        rst!序号 = Format(i序号 + 1, "00")
        rst!金额 = my45(Nz(rst!数量, 0) * Nz(rst!单价, 0), 2)    '四舍五入,否则会出错,这里调用了自定义四舍五入函数
        '-------------------------------------修改后,就要更新,否则不会被修改
        rst.Update
        '-------------------------------------重新设定序号与合计金额的变量
        i序号 = rst!序号
        Sum金额 = Sum金额 + rst!金额
        '-------------------------------------下一条记录
        rst.MoveNext
    Loop
    '-------------------------------------将合计金额斌给主窗体
    Me.Parent!金额 = Sum金额
    rst.Close
    Set rst = Nothing
    Me.Parent!状态 = "未保存"
End Function
另附UMVSoft老师的四舍五入函数,这里就用到了。
Public Function my45(a As Double, n As Integer) As Double
  my45 = Int(a * 10 ^ n + 0.51 ) / 10 ^ n
End Function

Access软件网官方交流QQ群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助