设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[ADO/DAO] 同样方法操作,速度相差很多

[复制链接]

点击这里给我发消息

1#
发表于 2011-11-1 13:52:15 | 显示全部楼层
123循环的记录集:"select 表_指令调拨表.流水号 from 表_指令调拨表 group by 表_指令调拨表.流水号 order by 表_指令调拨表.流水号"
有5737条记录,
db1循环的记录集:“select tbl.pycode from tbl group by tbl.pycode order by tbl.pycode”
只有484条记录。
谁快谁慢不就很清楚了。

点击这里给我发消息

2#
发表于 2011-11-1 20:58:55 | 显示全部楼层
使用这个函数,速度可以提高大概三分之一。
合并记录为字符串的一个函数
代码如下:
  1. Sub CMDPRINT_Click()

  2.     CurrentDb.Execute "delete * from 表_调拨明细"
  3.     t = Timer
  4.     CurrentDb.Execute "INSERT INTO 表_调拨明细( 流水号, 调拨明细 ) SELECT 表_指令调拨表.流水号, " & _
  5.         "DMerge('调出单号 & 半成品数量 & 备注','表_指令调拨表','流水号=' & [流水号] & '',',') " & _
  6.         " FROM 表_指令调拨表 GROUP BY 流水号 ORDER BY 流水号"

  7.     MsgBox "秏时: " & Timer - t & " 秒"

  8. End Sub

  9. Public Function DMerge(Exps As String, Domain As String, _
  10.     Optional Criteria As String, Optional Separator As String = ";") As String
  11.    
  12. '函数功能:  合并指定记录集指定字段值为一个字符串
  13. '参数说明:
  14. '  expr :         要合并的字段
  15. '  domain :     来源表或查询
  16. '  criteria :      可选,限制记录的条件表达式
  17. '  Separator : 可选,合并记录的分隔符,默认为分号(;)
  18. '
  19. '调用示例:  DMerge("姓名","人员表","性别='" & [性别] & "'",Chr(13) & Chr(10))
  20. '                以上示例在查询中,使用了换行分隔符,返回换行显示的姓名
  21. '作      者:  t小雨
  22. '创建时间:  2009/11/25

  23. On Error Resume Next
  24.     Dim rst As New ADODB.Recordset
  25.     Dim strSql As String
  26.    
  27.     strSql = "Select " & Exps & " From " & Domain
  28.     If Criteria <> "" Then strSql = strSql & " Where " & Criteria
  29.     rst.Open strSql, CurrentProject.Connection, adOpenStatic, adLockReadOnly, adCmdText
  30.    
  31.     If Not rst.EOF Then DMerge = rst.GetString(adClipString, , , Separator)
  32.     rst.Close
  33.     Set rst = Nothing
  34. End Function

复制代码

点击这里给我发消息

3#
发表于 2011-11-2 23:39:25 | 显示全部楼层
这个代码似乎快一点点
  1. Sub macro2()

  2. Dim arr2()
  3. Dim i As Integer
  4. Dim a As Integer
  5. Dim s As String
  6. Dim e As Double

  7. Dim rs As ADODB.Recordset

  8. CurrentDb.Execute "delete * from 表_调拨明细"

  9. e = Timer
  10. arr2 = CurrentProject.Connection.Execute("SELECT * FROM 表_指令调拨表 order by 流水号").getrows
  11. a = UBound(arr2, 2)

  12. Set rs = New ADODB.Recordset
  13. sql = "select * from 表_调拨明细"

  14. With rs
  15.     .Open sql, CurrentProject.Connection, 3, 3
  16.     For i = 0 To a
  17.         If i = 0 Then
  18.             s = arr2(1, i) & arr2(2, i) & arr2(3, i)
  19.         ElseIf arr2(0, i) = arr2(0, i - 1) Then
  20.             s = s & "," & arr2(1, i) & arr2(2, i) & arr2(3, i)
  21.         ElseIf arr2(0, i) <> arr2(0, i - 1) Then
  22.             .AddNew
  23.                 rs("流水号") = arr2(0, i - 1)
  24.                 rs("调拨明细") = s
  25.            .Update
  26.            s = arr2(1, i) & arr2(2, i) & arr2(3, i)
  27.         End If
  28.     Next
  29.      .AddNew
  30.          rs("流水号") = arr2(0, a)
  31.          rs("调拨明细") = s
  32.     .Update

  33.     MsgBox a + 1 & " " & Timer - e
  34. End With

  35. End Sub
复制代码

评分

参与人数 1经验 +3 收起 理由
zhufree + 3 很给力!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-30 16:53 , Processed in 0.098533 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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