设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[模块/函数] 请教版主(有关自定义函数的编译)

[复制链接]
跳转到指定楼层
1#
发表于 2012-5-2 10:08:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自定义了一个函数,调用的时候提示语法错误,请版主审阅赐教,谢谢!代码如下:

Public Function dSumRecordset(Expression As String, RecSet As DAO.Recordset, Optional Criteria As String = "") As Integer
  On Error GoTo errlbl
  If Not Criteria = "" Then
    RecSet.Filter = Criteria
    Set RecSet = RecSet.OpenRecordset
  End If
  Do While Not RecSet.EOF
     dSumRecordset = dSumRecordset + (Nz(RecSet.Fields(Expression), 0))
     RecSet.MoveNext
  Loop
  Exit Function
errlbl:
  MsgBox Err.Number & " " & Err.Description
End Function
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2012-5-2 11:16:11 | 只看该作者
传例子吧
3#
 楼主| 发表于 2012-5-2 11:48:07 | 只看该作者
Henry D. Sy 发表于 2012-5-2 11:16
传例子吧

单看这些语句能看出有哪些语法问题么?因为我的数据库比较大,而且数据比较敏感,真要传例子的话,我晚上再自己做一个简单的上传
4#
发表于 2012-5-2 11:56:46 | 只看该作者
视乎很多错误
5#
发表于 2012-5-2 12:07:10 | 只看该作者
  1. Public Function dSumRecordset(Expression As String, tblName As String, Optional Criteria As String = "") As Integer
  2.     On Error GoTo errlbl
  3.     Dim rs As DAO.Recordset
  4.     Dim strSQL As String
  5.     If Criteria <> "" Then
  6.         strSQL = "select * from " & tblName & " where " & Criteria
  7.     Else
  8.         strSQL = "select * from " & tblName
  9.     End If
  10.     Set rs = CurrentDb.OpenRecordset(strSQL)

  11.     Do While Not rs.EOF
  12.         dSumRecordset = dSumRecordset + (Nz(rs.Fields(Expression), 0))
  13.         rs.MoveNext
  14.     Loop
  15.     rs.Close
  16.     Set rs = Nothing
  17.     Exit Function
  18. errlbl:
  19.     MsgBox Err.Number & " " & Err.Description
  20. End Function
复制代码
调用
  1. SELECT 表1.a, 表1.b, dSumRecordset("b","表1","a='c'") AS 合计1, dSumRecordset("b","表1") AS 合计2
  2. FROM 表1;
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6#
 楼主| 发表于 2012-5-2 13:48:16 | 只看该作者
Henry D. Sy 发表于 2012-5-2 12:07
调用

函数的第二个参数我就是不想用表或者查询的名称,我想直接用子窗体筛选出来的记录集作为参数,所以当时就想用RecSet As DAO.Recordset作为参数,这个思路可行么?
7#
 楼主| 发表于 2012-5-2 14:01:57 | 只看该作者
Henry D. Sy 发表于 2012-5-2 12:07
调用

请打开附件的:H-供货商_记帐资料
子窗体里面的text39就是调用了自定义函数的:= dSumRecordset("[支付供货商金额]", me.recordsetclone, "[支付供货商方式] like '*现金*'"),
目的就是想能够在子窗体的记录集中求某些条件的和,而又不局限于只能用表或者查询来做参数,请版主赐教了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
8#
 楼主| 发表于 2012-5-2 16:41:12 | 只看该作者
Henry D. Sy 发表于 2012-5-2 12:07
调用

版主:能否详细解释一下这一句: Set rs = CurrentDb.OpenRecordset(strSQL)

rs引用的还是在表里通过criteria筛选出来的结果,而不是直接在子窗体里面得出的动态记录集吧?本人初学,有烦版主之处,请多见谅!
9#
发表于 2012-5-2 20:07:50 | 只看该作者
个人觉得没必要把问题复杂化,附上一个例子,希望可以给到LZ一些思路。
例子里分别以两种方法来完成统计的功能:
1、通过变更条件重新指定SQL然后更新子窗体的数据源来达到统计的目的。
2、通过子窗体筛选语句更新DCount(由于例子所限,这里就不用DSum啦)来达到统计的目的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-26 04:13 , Processed in 0.105018 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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