【问题标题】:VB6 Access speed when UPDATE to table更新表时的VB6访问速度
【发布时间】:2014-03-03 07:13:47
【问题描述】:

我知道 VB6 有点过时,但那是我继承的那一刻的应用程序。

我必须根据数组的结果对访问表进行更新。

该数组包含一个双精度数和要更新的记录的 id。

问题是有 120,000 条记录需要更新,但在一次测试中,仅对 374 条记录运行它就需要 60 秒。

这是我的更新代码

Dim oCon As New ADODB.Connection
Dim oRs As New ADODB.Recordset
Dim string3 As String
oCon.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & App.Path &"\hhis.mdb;Pwd=/1245;"

oCon.BeginTrans

For i = 0 To maxnumberofrecords - 1

string3 = "UPDATE YourRatings SET yourRatings=" & YourTotalRatingsAll(i) & " Where thisID = " & thisID(i) & ";"

oRs.Open string3, oCon, adOpenStatic, adLockOptimistic

Next i
oCon.CommitTrans
oCon.Close

我根据我读过的其他一些文章添加了“CommitTrans”,但这似乎并没有提高速度。

另一个问题是我将不得不运行另一个查询来将最高 (1) 排名到最低 (374) 并再次更新数据库...尽管我可能可以对数组做一些事情来添加该列同时。

这对我来说似乎很慢,尤其是当其他帖子在 14 秒内提到 200000 条记录时。

我是不是错过了什么? 从文本文件加载会更快吗?

提前感谢您的帮助。

恶意

【问题讨论】:

    标签: sql vb6


    【解决方案1】:

    使用Open,您总是会构造一个新的ResultSet 对象。试试oCon.execute string3,它只将 SQL 发送到您的数据库,没有 ResultSet 开销。

    确保您在thisID 上有一个索引。

    也许您的 Access DB 位于网络驱动器上。这可能会对性能产生很大影响。在本地尝试。

    【讨论】:

    • 这确实有助于减少几秒钟的时间,但实际完成更新仍需要 51 秒...希望我能改进这一点,但感谢您的建议。
    • 我把这个ID改成了主键,就这样。
    • 您在移动数据库时确实需要小心,尤其是当其他应用程序链接到它时。移动数据库通常有充分的理由。
    【解决方案2】:

    您为什么使用老旧​​的 Access Desktop ODBC 驱动程序而不是 Jet 4.0 OLEDB 提供程序?

    为什么要打开 Recordset 来执行 UPDATE 而不是在连接上调用 Execute?

    是否有任何原因您不能以独占方式打开数据库来执行此操作?锁定开销几乎被消除了,像 BeginTrans/CommitTrans 这样的“货物崇拜”技术失去了任何意义。

    您在表中的thisID 字段上有索引吗?

    尽快转移到神奇的子弹.Net。您的程序会更慢,但我们不必阅读所有指责 VB6 的抱怨。

    【讨论】:

      【解决方案3】:

      只是为了添加到 Wumpz 答案,您可能想尝试将查询直接添加到 Access 数据库中并使用参数调用它。 This SO thread 说了很多。

      与注入相比,参数更稳定且不易破解。

      【讨论】:

      • 谢谢我一直在考虑这样做。
      猜你喜欢
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多