设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[模块/函数] 批量生成数据,优化代码,节省时间,看看能否做到?谢谢

[复制链接]
跳转到指定楼层
1#
发表于 2018-9-11 10:41:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位老师我依据下面的代码将数据进行拆分(将这个LEVE_ID_MAX值为15拆分),追加到tblTemp表中,但是出现一个问题所需要时间太长1个多小时,表"tblTemp追踪单整理"一共3000条数据,请问有没有其他VBA代码,来快速生成数据,节省时间,谢谢, 帮助修改一下附件,谢谢

Sub 拆分()
On Error Resume Next
Dim S As String
Dim rst1 As ADODB.Recordset
Dim str1 As String
Dim x As Integer
Dim VarReturn As Variant
str1 = "SELECT * FROM tblTemp追踪单整理"
Set rst1 = New ADODB.Recordset
rst1.Open str1, CurrentProject.Connection, adOpenStatic, adLockReadOnly
VarReturn = SysCmd(acSysCmdSetStatus, " 数据正在生成中...稍后...  ")
If rst1.RecordCount > 0 Then
    rst1.MoveFirst
x = 0

Set rst = CurrentDb.OpenRecordset("tblTemp", dbOpenDynaset)
    For i = 1 To rst1.RecordCount
        For ii = 1 To rst1.Fields("LEVE_ID_MAX")
            S = ii
            DoCmd.RunSQL "INSERT INTO tblTemp SELECT '" & S & "' AS LEVE_ID, '" & rst1.Fields("END_ITEM") & "' AS END_ITEM, '" & rst1.Fields("ITEM_DESC") & "' AS ITEM_DESC"
         x = x + 1
        Next
        rst1.MoveNext
    Next
End If

'ReturnValue = SysCmd(acSysCmdUpdateMeter, x)
VarReturn = SysCmd(acSysCmdSetStatus, "数据已完成! ")
MsgBox "数据更新完毕,此次操作共新增:" & x & " 条记录!", vbInformation + vbOKOnly, "Level_ID数据更新"

End Sub

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2018-9-11 10:42:06 | 只看该作者
生成结果数据一共37245条数据
3#
 楼主| 发表于 2018-9-12 07:53:09 | 只看该作者
哪位老师有时间看看,谢谢!
4#
发表于 2018-9-13 17:43:05 | 只看该作者
都用到DAO了,为什么还要用insert select语句呢?如果不是批量追加的话,这个语句很占内存的。用insert into values的时候,大约6800多条就假死了。如果用select,估计也差不多。改纯ADO之后,大约7秒多完成了3.7万行的插入。DAO应该也差不多(只是我不太习惯用DAO而已,你可以改改)。



本帖子中包含更多资源

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

x
5#
 楼主| 发表于 2018-9-15 07:24:36 | 只看该作者
谢谢老师的帮助!

点击这里给我发消息

6#
发表于 2018-9-15 07:28:55 | 只看该作者
roych 发表于 2018-9-13 17:43
都用到DAO了,为什么还要用insert select语句呢?如果不是批量追加的话,这个语句很占内存的。用insert int ...

代码在哪啊?手机看不见啊,呵呵。是 addnew. ..update吗?
7#
发表于 2018-9-16 01:37:42 | 只看该作者
zpy2 发表于 2018-9-15 07:28
代码在哪啊?手机看不见啊,呵呵。是 addnew. ..update吗?

嗯。外加moveNext

点击这里给我发消息

8#
发表于 2018-9-16 09:45:49 | 只看该作者
roych 发表于 2018-9-16 01:37
嗯。外加moveNext


我用了insert好像只有6秒不到啊,呵呵😊,应该不是Sql慢啊。。。



本帖子中包含更多资源

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

x
9#
发表于 2018-9-16 09:59:17 | 只看该作者
如果一次性插入过千条,开启事务,插入access数据库,性能还能得到提升。如果过万条,或十万条,开启事务,性能提升会非常明显。

点击这里给我发消息

10#
发表于 2018-9-16 12:32:07 | 只看该作者
ganlinlao 发表于 2018-9-16 09:59
如果一次性插入过千条,开启事务,插入access数据库,性能还能得到提升。如果过万条,或十万条,开启事务, ...

又测试了一下 addnew update,发现 Roch是对的,addnew 大量数据更快。

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-4 06:20 , Processed in 0.100579 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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