Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

请老师帮助写余额函数

半夜罗  发表于:2017-11-08 20:29:13  
复制

  因实际工作需要,经常用到余额的计算,在本站中有很多方法都不是很如意。自己写了一个代码,效果很不错。但无法将其写成公共模块,方便调用,只能一个模块写一次。如果能写成公共模块就好了。代码如下:

    Dim cn As New ADODB.Connection    '连接对象
    Dim rs As New ADODB.Recordset    '记录集对象
    Dim y As Currency    '货币类型
    Dim strSQL As String    '查询字符串
    DAO.DBEngine.SetOption dbMaxLocksPerFile, 1000000    '设计数据库可以运行的记录条数为100万条

    Set cn = CurrentProject.Connection
    strSQL = "SELECT * FROM 销售单 ORDER BY 往来代码, 序号"    '设置查询语句
    rs.Open strSQL, cn, adOpenDynamic, adLockOptimistic, adCmdText    '记录集
    rs.MoveFirst    '从第一条记录开始
    y = 0
    Do While Not rs.EOF '循环开始
        rs!余额 = Nz(rs!金额) - Nz(rs!收款) - Nz(rs!费用) + y
        rs.Update    '保存上面计算的结果到数据库中
        y = rs!余额    '重新设定 y 值计算下一条记录
        rs.MoveNext    '跳转到下一条记录
    Loop
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing

谢谢了!!!!!!!

 

Top
半夜罗 发表于:2017-11-08 22:09:13

对不起,上面的代码有误,应该是:

    Dim cn As New ADODB.Connection    '连接对象
    Dim rs As New ADODB.Recordset    '记录集对象
    Dim y As Currency    '货币类型
    Dim fd As String
    Dim strSQL As String    '查询字符串
    DAO.DBEngine.SetOption dbMaxLocksPerFile, 1000000    '设计数据库可以运行的记录条数为100万条


    Set cn = CurrentProject.Connection    '把 连接对象设定为本数据库,并连接
    strSQL = "SELECT * FROM 销售单 ORDER BY [往来代码], [序号]"    '设置查询语句
    rs.Open strSQL, cn, adOpenDynamic, adLockOptimistic, adCmdText    '记录集
    rs.MoveFirst    '使记录的指针指到第一条记录
    y = 0
    Do While Not rs.EOF    '循环开始
        If fd <> rs!往来代码 Then
            fd = rs!往来代码
            y = 0
        End If
        rs!余额 = Nz(rs!金额, 0) - Nz(rs!收款, 0) - Nz(rs!费用, 0) + y
        rs.Update    '保存上面这个公式计算的结果到数据库中
        y = rs!余额    '为下一步计算余额作准备,重新设定 y 值
        rs.MoveNext    '把记录指针跳转到下一条记录
    Loop
    rs.Close    '关闭记录集对象
    cn.Close    '关闭连接对象
    Set rs = Nothing    '释放记录集对象
    Set cn = Nothing    '释放连接对象


    '这种方法的好处是不用建立临时查询



总记录:1篇  页次:1/1 9 1 :