设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[与其它组件] 求教:有没有比这个方法运行速度更快的方法!

[复制链接]
跳转到指定楼层
1#
发表于 2003-5-27 03:51:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我制作了一个考勤表输入,为统计每种出勤情况,我做了如下函数:并在查询中使用此函数,但运行时很慢。(每个日期[即1-31号]为一个字段。)有谁有更好的方法。不改变表结构思路的方法!
Function KSum(DD As String, ID As Integer) As Integer

Dim h, J As Integer
J = 0
For h = 1 To 31
On Error GoTo ER
'     MsgBox (DLookup("[" & CStr(h) & "]", "考勤表SUB", "[ID]=" & ID))
    kk = IIf(DLookup("[" & CStr(h) & "]", "考勤表SUB", "[ID]=" & ID) = DD, 1, 0)

    J = J + kk
Next h

KSum = J
Exit Function
ER:
If Err() = 94 Then
    kk = 0
Else
    MsgBox (Err())
End If
Resume Next

End Function


本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2003-5-27 05:09:00 | 只看该作者
上面的函数在调试时我无法运行。
3#
 楼主| 发表于 2003-5-27 05:37:00 | 只看该作者
我这正常,我的系统是access2000 +win98或win2000高级版!
4#
 楼主| 发表于 2003-5-27 05:38:00 | 只看该作者
点击窗体上的[预鉴]不行吗!
5#
发表于 2003-5-27 08:04:00 | 只看该作者
Re:用DAO代替DLookup,测试了一下,速度提高了,也可以试一下在查询里用 加班:iif([1]="加",1,0)+iif([2]="加",1,0)+...+iif([31]="加",1,0),不过录入太烦了,我也没试过:(。


Function KSum(DD As String, ID As Integer) As Integer

Dim h, J As Integer
Dim rst As DAO.Recordset
Set rst = CurrentDb().OpenRecordset("select * from 考勤表SUB")
rst.FindFirst "[ID]=" & ID
J = 0
For h = 1 To 31
On Error GoTo ER
'     MsgBox (DLookup("[" & CStr(h) & "]", "考勤表SUB", "[ID]=" & ID))
    kk = IIf(rst("" & h & "") = DD, 1, 0)

    J = J + kk
Next h

KSum = J
Exit Function
ER:
If Err() = 94 Then
    kk = 0
Else
    MsgBox (Err())
End If
Resume Next

End Function
6#
 楼主| 发表于 2003-5-27 17:55:00 | 只看该作者
DAO的方法我刚才测试了,效果非常好,比原先速度提高了13倍多。(使用时要先引用一下ADO!)至于在查询中用IIF()的方法,我试过了,跟用我的函数,大至上没什么明显的区别!(因为我对DAO、sol查询语名一点都不懂)。
不知道各位还有没有其它方法。不过,在速度上是一方面。在思路上又是另一方面,思路可是程序的生命!请大伙发挥一下你的的思路吧!
7#
发表于 2003-5-28 06:03:00 | 只看该作者
Function KSum(ParamArray Ary()) As Integer
    Dim i As Integer
    For i = 1 To UBound(Ary)
        KSum = KSum + IIf(Ary(i) = Ary(0), 1, 0)
    Next
End Function

查询里 加班:Ksum("加",[1],[2],[3].......[20])+Ksum("加",[21],[22],[23].......[31])
这种方法速度最快,因为只用到本记录的字段作参数,其实和在查询里直接用IIF计算是一样的,你试的时候可能是没把所有的计算字段更换,还用到你的函数,所以没什么明显的区别。

本帖子中包含更多资源

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

x
8#
 楼主| 发表于 2003-5-29 05:22:00 | 只看该作者
班主可真行。其实我所用的与直接用IIF()写没区别:KNum()+KNum() 的方法 不过速度很慢。用数组的方法没有想到过!再次谢谢!又多长的见识!
Function KNum(JR As String, Dh As String) As Integer
If JR = Dh Then
    KNum = 1
Else
    KNum = 0
End If

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

本版积分规则

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

GMT+8, 2024-5-13 15:43 , Processed in 0.092416 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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