Office中国论坛/Access中国论坛

标题: 请教版主(有关自定义函数的编译) [打印本页]

作者: smilingkiss    时间: 2012-5-2 10: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
作者: Henry D. Sy    时间: 2012-5-2 11:16
传例子吧
作者: smilingkiss    时间: 2012-5-2 11:48
Henry D. Sy 发表于 2012-5-2 11:16
传例子吧

单看这些语句能看出有哪些语法问题么?因为我的数据库比较大,而且数据比较敏感,真要传例子的话,我晚上再自己做一个简单的上传
作者: Henry D. Sy    时间: 2012-5-2 11:56
视乎很多错误

作者: Henry D. Sy    时间: 2012-5-2 12:07
  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;
复制代码
[attach]49102[/attach]
作者: smilingkiss    时间: 2012-5-2 13:48
Henry D. Sy 发表于 2012-5-2 12:07
调用

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

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

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

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




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