Office中国论坛/Access中国论坛

标题: 批量生成数据,优化代码,节省时间,看看能否做到?谢谢 [打印本页]

作者: yanwei82123300    时间: 2018-9-11 10:41
标题: 批量生成数据,优化代码,节省时间,看看能否做到?谢谢
各位老师我依据下面的代码将数据进行拆分(将这个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


作者: yanwei82123300    时间: 2018-9-11 10:42
生成结果数据一共37245条数据
作者: yanwei82123300    时间: 2018-9-12 07:53
哪位老师有时间看看,谢谢!
作者: roych    时间: 2018-9-13 17:43
都用到DAO了,为什么还要用insert select语句呢?如果不是批量追加的话,这个语句很占内存的。用insert into values的时候,大约6800多条就假死了。如果用select,估计也差不多。改纯ADO之后,大约7秒多完成了3.7万行的插入。DAO应该也差不多(只是我不太习惯用DAO而已,你可以改改)。
[attach]62779[/attach]

[attach]62780[/attach]

作者: yanwei82123300    时间: 2018-9-15 07:24
谢谢老师的帮助!
作者: zpy2    时间: 2018-9-15 07:28
roych 发表于 2018-9-13 17:43
都用到DAO了,为什么还要用insert select语句呢?如果不是批量追加的话,这个语句很占内存的。用insert int ...

代码在哪啊?手机看不见啊,呵呵。是 addnew. ..update吗?
作者: roych    时间: 2018-9-16 01:37
zpy2 发表于 2018-9-15 07:28
代码在哪啊?手机看不见啊,呵呵。是 addnew. ..update吗?

嗯。外加moveNext
作者: zpy2    时间: 2018-9-16 09:45
roych 发表于 2018-9-16 01:37
嗯。外加moveNext

[attach]62794[/attach]
[attach]62793[/attach] 我用了insert好像只有6秒不到啊,呵呵😊,应该不是Sql慢啊。。。




作者: ganlinlao    时间: 2018-9-16 09:59
如果一次性插入过千条,开启事务,插入access数据库,性能还能得到提升。如果过万条,或十万条,开启事务,性能提升会非常明显。
作者: zpy2    时间: 2018-9-16 12:32
ganlinlao 发表于 2018-9-16 09:59
如果一次性插入过千条,开启事务,插入access数据库,性能还能得到提升。如果过万条,或十万条,开启事务, ...

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

作者: GOODWIN    时间: 2021-10-4 15:52
roych 发表于 2018-9-13 17:43
都用到DAO了,为什么还要用insert select语句呢?如果不是批量追加的话,这个语句很占内存的。用insert int ...

学习了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3