Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS Access:VBA代码运行缓慢_Vba_Ms Access - Fatal编程技术网

MS Access:VBA代码运行缓慢

MS Access:VBA代码运行缓慢,vba,ms-access,Vba,Ms Access,需要你们的帮助,我怎样才能使下面的代码运行得更快。我花了3个小时来运行这个代码 为了让您了解我表中的内容,我有3个字段(帐号、金额、连接帐号/金额)。我实际上没有主键,我依赖这些字段,特别是连接数据作为匹配的基础。我真正想得到的是两个表的不匹配记录,而代码确实帮助解决了我的问题。我唯一的问题是处理时间,因为两个表都有25000条记录。希望你们能缩短处理时间 Dim rstT1 As Recordset Dim rstUpdate As Recordset Dim iMatching As Str

需要你们的帮助,我怎样才能使下面的代码运行得更快。我花了3个小时来运行这个代码

为了让您了解我表中的内容,我有3个字段(帐号、金额、连接帐号/金额)。我实际上没有主键,我依赖这些字段,特别是连接数据作为匹配的基础。我真正想得到的是两个表的不匹配记录,而代码确实帮助解决了我的问题。我唯一的问题是处理时间,因为两个表都有25000条记录。希望你们能缩短处理时间

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张唱片,我猜不到一分钟,当然不是几个小时。