DateTime 是唯一的。其余字段与先前记录匹配的记录应删除,留下“第一”记录。-6ren">
gpt4 book ai didi

vba - 删除连续的重复项 : "File sharing lock count exceeded" at 9k of 1m records

转载 作者:行者123 更新时间:2023-12-05 04:04:43 25 4
gpt4 key购买 nike

我需要从一个大表中删除连续的重复记录(它可能包含 20 万到 100 万条记录,并且大约一半的记录将被删除)。 p>

DateTime 是唯一的。其余字段与先前记录匹配的记录应删除,留下“第一”记录。 (不连续的重复项应该保留。)

       DateTime        Field1   Field2   Field3  
-------------------- -------- -------- --------
2018-09-01 5:20:33 123 456 789
2018-09-01 5:20:34 123 456 789 ← delete
2018-09-01 5:20:35 123 654 987
2018-09-01 5:20:36 234 567 890
2018-09-01 5:20:37 234 567 890 ← delete
2018-09-01 5:20:38 234 567 890 ← delete
2018-09-01 5:20:39 123 456 789

我正在遍历记录集(按日期排序)以删除重复项,但是当我删除了大约 9,500 次时,我得到:

Error 3052: File sharing lock count exceeded.  
Increase MaxLocksPerFile registry entry.

根据 these instructions ,我可以增加注册表中的值,或者使用 SetOption 方法,但是我不清楚这样做的影响,因为它看来我需要将值从 9,500 增加到至少 500,000 或更多...我不确定,但这似乎是个坏主意。


我的代码的简化版本:

Sub example_DelDupes()
Dim rs As Recordset, delCount As Long, rCount as long
Dim thisRecord As String, prevRecord As String
Set rs = CurrentDb.OpenRecordset("select * from myTable order by DateTime")
With rs
.MoveLast 'so I can get a recordcount...
.MoveFirst
rCount = .RecordCount '...required for progress bar (not shown)

Do While Not .EOF
thisRecord = !field1$ & !field2$ & !field3$ 'actually
If thisRecord = prevRecord Then
.Delete 'delete this record
delCount = delCount + 1
Else
prevRecord = thisRecord
End If
.MoveNext
Loop

.Close
End With
Set rs = Nothing
End Sub

我认为从我正在迭代的集合中删除可能是个问题,所以我还尝试标记要删除的记录,而不是 .Delete打算在循环完成后删除它们,但编辑产生了与删除相同的错误。


我怀疑可能有更好的方法来完成我的任务,也许是通过使用 different LockTypeEnum 打开记录集,或者通过完全不同的方式来处理这个问题,但我希望避免反复试验。

想法?谢谢! <子>img

最佳答案

我会在单个查询中删除所有内容,而不是遍历记录集。

您可以使用嵌套子查询来测试前一行是否满足您的条件:

DELETE o.*
FROM MyTable o
WHERE EXISTS(
SELECT 1
FROM MyTable i
WHERE o.Field1 = i.Field1 And o.Field2 = i.Field2 AND o.Field3 = i.Field3
AND EXISTS (
SELECT 1
FROM MyTable i2
WHERE i2.DateTime < o.DateTime
HAVING Max(i2.DateTime) = i.DateTime
)
)

关于vba - 删除连续的重复项 : "File sharing lock count exceeded" at 9k of 1m records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com