设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[技巧] ADP中替代域聚合函数的一个函数

[复制链接]
跳转到指定楼层
1#
发表于 2008-3-25 10:33:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADP中虽然还是可以使用域聚合函数,但是引用方式等和MDB有一些区别,而且如果是远程方式速度也是一个问题,参考道士的系统,我把域聚合函数统一整理为一个函数。
Public Function hy_DFunction(ByVal strDFunctionType As String, ByVal strFieldName As String, ByVal strTableName As String, Optional ByVal strWhere As String) As Variant
'===============================================================================
'功能描述:等同于MDB中聚合函数,解决DLOOKUP函数在ADP中的问题,同时也解决了网络版DLOOKUP慢的问题,这个函数也可以用于MDB中
'参数说明:strDFunctionType原聚合函数类型;需要在表中搜索的字段名;strTableName表名;strWhere条件
'使用示例:me.lbl1.caption=hy_DFunction("Dlookup", DefaultLanguage, "sysLanguageItem", "ObjectName='frmLogin' and Control='lblRoll'")
'函数参考:道士的权限管理系统,原作者zlong
'使用注意:这个函数虽然包含了绝大多少的聚合函数的替代方式,但是对于DAvg等包含了重复值的情况,如果要排除重复值,请在SELECT后加入DISTINCT关键字
'创建日期:2008-03-25  更新日期: 2008-03-25
'调试状态:OK
'===============================================================================
Dim mySql As String
Select Case strDFunctionType
    Case "DLookup"
        mySql = "SELECT " & strFieldName & " FROM " & strTableName
    Case "DMax"
        mySql = "SELECT Max(" & strFieldName & ") FROM " & strTableName
    Case "DMin"
        mySql = "SELECT Min(" & strFieldName & ") FROM " & strTableName
    Case "DCount"
        mySql = "SELECT Count(" & strFieldName & ") FROM " & strTableName
    Case "DAvg"
        mySql = "SELECT Avg(" & strFieldName & ") FROM " & strTableName
    Case "DVar"
        mySql = "SELECT Var(" & strFieldName & ") FROM " & strTableName
    Case "DVarP"
        mySql = "SELECT VarP(" & strFieldName & ") FROM " & strTableName
    Case "DStDev"
        mySql = "SELECT StDev(" & strFieldName & ") FROM " & strTableName
    Case "DStDevP"
        mySql = "SELECT StDevP(" & strFieldName & ") FROM " & strTableName
    Case Else
        MsgBox hy_LanguageMsgItem("1212"), vbInformation, hy_LanguageMsgItem("1203")
        Exit Function
End Select
If Len(strWhere) > 0 Then mySql = mySql & " WHERE " & strWhere
On Error Resume Next
hy_DFunction = CurrentProject.Connection.Execute(mySql)(0)
If Err <> 0 Then '如果有错误发生则返回错误消息并返回空值
    MsgBox Err.Description, vbInformation, hy_LanguageMsgItem("1203")
    Err.Clear
    hy_DFunction = Null
End If
End Function

评分

参与人数 1经验 +3 收起 理由
ADAM + 3

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2008-3-25 10:37:19 | 只看该作者
先收藏再说 [:12]

点击这里给我发消息

3#
发表于 2008-3-25 11:45:26 | 只看该作者
谢谢小不点的分享
4#
发表于 2008-5-22 08:46:37 | 只看该作者
多谢
5#
发表于 2008-7-14 12:06:46 | 只看该作者
呵呵,不错,分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 19:36 , Processed in 0.121257 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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