MS Access:VBA代码运行缓慢
需要你们的帮助,我怎样才能使下面的代码运行得更快。我花了3个小时来运行这个代码 为了让您了解我表中的内容,我有3个字段(帐号、金额、连接帐号/金额)。我实际上没有主键,我依赖这些字段,特别是连接数据作为匹配的基础。我真正想得到的是两个表的不匹配记录,而代码确实帮助解决了我的问题。我唯一的问题是处理时间,因为两个表都有25000条记录。希望你们能缩短处理时间MS Access:VBA代码运行缓慢,vba,ms-access,Vba,Ms Access,需要你们的帮助,我怎样才能使下面的代码运行得更快。我花了3个小时来运行这个代码 为了让您了解我表中的内容,我有3个字段(帐号、金额、连接帐号/金额)。我实际上没有主键,我依赖这些字段,特别是连接数据作为匹配的基础。我真正想得到的是两个表的不匹配记录,而代码确实帮助解决了我的问题。我唯一的问题是处理时间,因为两个表都有25000条记录。希望你们能缩短处理时间 Dim rstT1 As Recordset Dim rstUpdate As Recordset Dim iMatching As Str
Dim rstT1 As Recordset
Dim rstUpdate As Recordset
Dim iMatching As String
Dim iT1, iT2 As Long
Dim iMatchNum As Long
Dim iMatchID As Long
Dim i As Long
CurrentDb.Execute ("UPDATE Table01 SET MatchNum = null")
CurrentDb.Execute ("UPDATE Table02 SET MatchNum = null")
Set rstT1 = CurrentDb.OpenRecordset("qryTable1Processing1")
Do While rstT1.EOF <> True
iMatching = rstT1!User_ID
iT1 = DCount("*", "Table01", "[User_ID] = '" & iMatching & "'")
iT2 = DCount("*", "Table02", "[Combine] = '" & iMatching & "'")
If iT1 > 0 And iT2 > 0 Then
If iT1 > iT2 Then
iMatchNum = iT2
Else
iMatchNum = iT1
End If
Debug.Print dDate & " " & iMatchNum
Set rstUpdate = CurrentDb.OpenRecordset("SELECT TOP " & iMatchNum & " MatchNum FROM Table01 WHERE [User_ID] = '" & iMatching & "'")
i = 0
Do While rstUpdate.EOF <> True
i = i + 1
rstUpdate.Edit
rstUpdate!matchnum = iMatchID + i
rstUpdate.Update
rstUpdate.MoveNext
Loop
rstUpdate.Close
Set rstUpdate = CurrentDb.OpenRecordset("SELECT TOP " & iMatchNum & " MatchNum FROM Table02 WHERE [Combine] = '" & iMatching & "'")
i = 0
Do While rstUpdate.EOF <> True
i = i + 1
rstUpdate.Edit
rstUpdate!matchnum = iMatchID + i
rstUpdate.Update
rstUpdate.MoveNext
Loop
rstUpdate.Close
Debug.Print "adding " & iMatchID & " to " & iMatchNum
iMatchID = iMatchID + iMatchNum
End If
rstT1.MoveNext
Loop
rstT1.Close
Set rstT1 = Nothing
End Sub
Dim rstT1作为记录集
Dim rstUpdate作为记录集
像字符串一样模糊
将iT1变暗,iT2变长
暗淡的影像和长的一样
暗淡的伊玛奇像长的一样
我想我会坚持多久
CurrentDb.Execute(“updatetable01 SET MatchNum=null”)
CurrentDb.Execute(“更新表02 SET MatchNum=null”)
Set rstT1=CurrentDb.OpenRecordset(“qryTable1Processing1”)
当rstT1.EOF为True时执行此操作
i匹配=rstT1!用户ID
iT1=DCount(“*”、“Table01”、“[User\u ID]=”、&iMatching&“”)
iT2=DCount(“*”、“Table02”、“[Combine]=”、“&iMatching&“”)
如果iT1>0和iT2>0,则
如果iT1>iT2,则
iMatchNum=iT2
其他的
iMatchNum=iT1
如果结束
调试。打印dDate&“”和iMatchNum
Set rstUpdate=CurrentDb.OpenRecordset(“从表01中选择TOP”&iMatchNum&“MatchNum,其中[User\u ID]=””&iMatching&“”)
i=0
当rstUpdate.EOF为True时执行
i=i+1
rstUpdate.Edit
重新开始!matchnum=iMatchID+i
rstUpdate.Update
rstUpdate.MoveNext
环
rstUpdate,关闭
Set rstUpdate=CurrentDb.OpenRecordset(“从表02中选择TOP”&iMatchNum&“MatchNum”,其中[Combine]='“&iMatching&'”)
i=0
当rstUpdate.EOF为True时执行
i=i+1
rstUpdate.Edit
重新开始!matchnum=iMatchID+i
rstUpdate.Update
rstUpdate.MoveNext
环
rstUpdate,关闭
调试。打印“添加”&iMatchID&“到”&iMatchNum
iMatchID=iMatchID+iMatchNum
如果结束
rstT1.MoveNext
环
rstT1.关闭
设置rstT1=无
端接头
首先要检查的是,您是否在[User\u ID]
和[Combine]
上设置了索引。sir@Gustav我不会为这两个字段创建索引。好吧,那就这样做。没关系。sir@Gustav这两个字段有重复的值,因此,我无法设置索引。除了索引和添加PK之外,您需要重新考虑整个过程。无论您做什么,使用DCount并逐个浏览每个记录都会很慢。我将使用查询来确定要更新的记录,如果需要,将结果转储到临时表中,然后创建一个更新查询,将临时表连接到要更新的表并运行它。对于25000张唱片,我猜不到一分钟,当然不是几个小时。