设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 3868|回复: 11
打印 上一主题 下一主题

[ADO/DAO] [求助]使用ADO速度还是慢

[复制链接]
跳转到指定楼层
1#
发表于 2007-4-9 22:46:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在上面的例子中,自定义函数的计算速度很慢(需要这个函数,原来的有循环计算的,为了避免问题复杂化,这里简化了)。

OPEN这句对速度影响最大,其次是DCOUNT。

有什么办法可以解决呢?请高手指导!

谢谢先!

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-4-9 23:02:00 | 只看该作者

    'If DCount("*", "查询结果") = 0 Then->

If rs.EOF Or rs.BOF Then
3#
 楼主| 发表于 2007-4-10 00:10:00 | 只看该作者
谢谢wwwwa大师!速度比DCOUNT要快的多!

第一个影响最关键的有办法吗?

请继续指教!
4#
 楼主| 发表于 2007-4-11 03:39:00 | 只看该作者
请高手指点一二,比如其他方向
5#
发表于 2007-4-11 04:00:00 | 只看该作者
把具体要求说一下,实现查询也许有更好的方法
6#
 楼主| 发表于 2007-4-11 06:16:00 | 只看该作者
谢谢ANDYMARK大师先!

我要计算最长超期天数,方法是先计算出超期金额(这个容易实现),然后根据该客户的放帐天数,计算起始应付日期,接着倒算达到超期金额的最后一笔出货,找到这一天,就计算出最长的超期天数了。倒算是用循环语句实现的,无法在查询中用合计函数形成可用表达式,因此使用了自定义函数。开始用了DLOOKUP和DSUM等,更慢。现在是用ADO调用查询,然后在查询记录集中使用循环测算,但是速度还是慢。主要是反复打开这个查询造成的,不知道对不?

改变数据结构可以搞掂,但对使用者会带来一点麻烦。

不知道是否表达清楚了。
7#
发表于 2007-4-11 06:26:00 | 只看该作者
直接用查询应能实现的, 为方便理解,把结果贴上来
8#
 楼主| 发表于 2007-4-11 06:55:00 | 只看该作者
If cq > 0.01 Then
                inta = 0
                inidq = Now() - Me.»õµ½¸¶¿îÌìÊý
                rs.Open "²éѯ½á¹û", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
                rs.MoveFirst
                inida = rs("·¢ÉúÈÕÆÚ")
                rs.MoveLast
                Do Until rs.Fields("·&cent;&Eacute;ú&Egrave;&Otilde;&AElig;&Uacute;") < inidq
                    inid = rs("·&cent;&Eacute;ú&Egrave;&Otilde;&AElig;&Uacute;")
                    If inid = inida Then
                        MsgBox FormatDateTime(inid, vbLongDate) & "&Ouml;&reg;&Ccedil;°&Atilde;&raquo;&Oacute;&ETH;&sup3;&ouml;&raquo;&otilde;&frac14;&Ccedil;&Acirc;&frac14;"
                    Exit Do
                    End If
                    rs.MovePrevious
                Loop
                Do Until inta >= (cq - 0.01) * 10000
                    inta = inta + rs("&sup3;&ouml;&raquo;&otilde;&frac12;&eth;&para;&icirc;")
                    inid = rs("·&cent;&Eacute;ú&Egrave;&Otilde;&AElig;&Uacute;")
                    If inid = inida Then
                        MsgBox FormatDateTime(inid, vbLongDate) & "&Ouml;&reg;&Ccedil;°&Atilde;&raquo;&Oacute;&ETH;&sup3;&ouml;&raquo;&otilde;&frac14;&Ccedil;&Acirc;&frac14;"
                    Exit Do
                    End If
                    rs.MovePrevious
                Loop
                strsqlcq = "select * from &sup2;é&Ntilde;&macr;&frac12;á&sup1;&ucirc; where ·&cent;&Eacute;ú&Egrave;&Otilde;&AElig;&Uacute;<= #" & inidq & "# and ·&cent;&Eacute;ú&Egrave;&Otilde;&AElig;&Uacute;>= #" & inid & "# and &sup3;&ouml;&raquo;&otilde;&frac12;&eth;&para;&icirc;<>0"
                Me.&sup3;&not;&AElig;&Uacute;&sup2;é&Ntilde;&macr;×&Oacute;&acute;°&Igrave;&aring;.Form.RecordSource = strsqlcq
                Me.&sup3;&not;&AElig;&Uacute;&sup2;é&Ntilde;&macr;×&Oacute;&acute;°&Igrave;&aring;.Requery
                MsgBox FormatDateTime(inid, vbLongDate) & "&Ouml;&reg;&Ccedil;°&Atilde;&raquo;&Oacute;&ETH;&sup3;&ouml;&raquo;&otilde;&frac14;&Ccedil;&Acirc;&frac14;"
            Else
                strWhere = ""
                strWhere = strWhere & "([&iquest;&Iacute;&raquo;§&Atilde;&ucirc;&sup3;&AElig;] like '" & "&sup3;&otilde;&Ecirc;&frac14;×&Oacute;&acute;°&Igrave;&aring;&sup2;&raquo;&Iuml;&Ocirc;&Ecirc;&frac34;&Egrave;&Icirc;&ordm;&Icirc;&Auml;&Uacute;&Egrave;&Yacute;" & "')"
                Me.&sup3;&not;&AElig;&Uacute;&sup2;é&Ntilde;&macr;×&Oacute;&acute;°&Igrave;&aring;.Form.Filter = strWhere
                Me.&sup3;&not;&AElig;&Uacute;&sup2;é&Ntilde;&macr;×&Oacute;&acute;°&Igrave;&aring;.Form.FilterOn = True
            End If

9#
 楼主| 发表于 2007-4-11 06:57:00 | 只看该作者
不知道为什么会乱码[em06]

您说的结果是这个吗?这样的循环一共有8个。
10#
发表于 2007-4-11 07:07:00 | 只看该作者
不是,是查询后的最终结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 19:19 , Processed in 0.117947 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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