gpt4 book ai didi

ms-access - VB6 Ms Access 数据库编辑大量记录

转载 作者:行者123 更新时间:2023-12-02 23:04:31 26 4
gpt4 key购买 nike

我需要使用 VB6 和 MS Access 数据库处理数十万条记录。我遍历记录集并编辑每条记录。然而,这样做需要很多时间。使用 Addnew 和 Update 方法创建具有相同数量记录的数据库的速度要快得多。

如果有人向我展示任何代码示例或只是一个策略,我将不胜感激。

这是代码

Data1(1).RecordSource = "Select * from TABLE order by Field_A ASC"
Data1(1).Refresh
If Data1(1).Recordset.RecordCount > 0 Then
Data1(1).Recordset.MoveFirst
Do
Data1(1).Recordset.Edit
Data1(1).Recordset.Fields("FIELD") = Sort_Value
Data1(1).Recordset.Update
Data1(1).Recordset.MoveNext
Loop Until Data1(1).Recordset.EOF = True
End If

这真的非常非常简单。真正的事情是,我忘了提及,计算机的硬盘不断地红/写。这实际上就是问题所在。负载如此重,不可能不影响性能。

我首先想到的是查询生成的记录集(请记住,我们有 1-2 百万条记录)会导致此问题。我猜它驻留在硬盘驱动器和 RAM 上的某个临时位置。所以执行.Edit和.Update可能会出现问题,首先将光标定位在正确的位置然后写入。

不确定。也许会有专家给我指点迷津。

顺便说一句。我也尝试更换 循环直到 Data1(1).Recordset.EOF = True具有固定长度循环的语句,因为我还读到,这种对 Recordset.EOF 的检查也会降低性能。

提前谢谢您!

最佳答案

我创建了一个名为 test 的表,其中包含字段 nf(n)

定时 3 个不同的更新子例程 - 没有事务的记录集 - 包含交易的记录集 - 更新查询

Sub updateFunction_noTrans()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("test")
rs.MoveFirst
Do Until rs.EOF
rs.Edit
rs("f(n)") = rs("n") + 1
rs.Update
rs.MoveNext
Loop
End Sub

这基本上就是您正在做的事情,编辑字段时的直接记录集

Sub updateFunction_yesTrans()
Dim i As Long
Dim commitSize As Long
Dim rs As Recordset
commitSize = 5000
Set rs = CurrentDb.OpenRecordset("test")
DBEngine.Workspaces(0).BeginTrans
rs.MoveFirst
Do Until rs.EOF
rs.Edit
rs("f(n)") = rs("n") + 1
rs.Update
rs.MoveNext
i = i + 1
If i = commitSize Then
DBEngine.Workspaces(0).CommitTrans
DBEngine.Workspaces(0).BeginTrans
i = 0
End If
Loop
DBEngine.Workspaces(0).CommitTrans
End Sub

这是相同的想法,但涉及事务。我一次提交 5000 条记录,因为每次提交有 9k-10k 左右的限制。我相信您可以通过进入注册表来编辑它。

Sub updateFunction_updateQuery()
CurrentDb.Execute ("UPDATE test SET test.[f(n)] = [n]+1;")
End Sub

这比任何记录集方法都要快。例如。在大约 200 万条记录上,没有事务的情况下大约需要 20 秒,有事务的情况大约需要 18-19 秒,有更新查询的情况大约需要 14 秒。

这一切都是假设要更新的字段取决于从该记录中的其他恶魔计算的值

要真正加快此类操作,有时取决于具体情况,如果不适用,则需要更多详细信息。

编辑:使用旧的 core 2 duo 机器 + 字段上没有索引

关于ms-access - VB6 Ms Access 数据库编辑大量记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142193/

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