【问题标题】:VBA: OpenRecordset .AddNew method runs slowVBA:OpenRecordset .AddNew 方法运行缓慢
【发布时间】:2015-07-31 20:46:05
【问题描述】:

我有一个 Access 应用程序,它有一个链接到 SQL Server 2008 的表 (AuditTrail)。我正在尝试以编程方式将记录添加到审计跟踪表中。

我有以下代码:

    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Set db = CurrentDb
    Set rs = db.OpenRecordset("AuditTrail", dbOpenDynaset, dbSeeChanges)

    With rs
        .AddNew
        rs("dtDateTime") = Now()
        rs("txtComment") = Nz(Mycomment, "")
        .Update
        .Close
    End With

Set db = Nothing
Set rs = Nothing

我最近注意到的问题是运行 .AddNew 语句需要几秒钟(最多 13 秒)。

该表现在大约有 50 万条记录。

有什么办法可以降低这个时间?

【问题讨论】:

  • 究竟需要 13 秒?是 .AddNew 本身还是其中一个功能?
  • 如果我逐行调试代码,执行 AddNew 方法需要 13 秒以上。
  • 它们是链接/ODBC 表吗?是否还有其他表级触发器?
  • 这是一个链接的 ODBC 表。

标签: vba ms-access


【解决方案1】:

使用您当前的代码,您会无缘无故地打开整个表格。 有几个选项。
一种是添加一个不会返回任何记录的 where 子句。类似
Select dtDateTime, txtComment FROM AuditTrail WHERE <yourIdField> = -1

第二个(我的偏好)是根本不使用记录集。使用插入语句。

Dim strSql as String strSql = "INSERT INTO AuditTrail (dtDateTime, txtComment) Values(#" & Noe() & "#,'" & nz(MyComment,'') & "')" 
Db.Execute strSql, dbFailOnerror + DbSeeChanges`

【讨论】:

  • 我忘记了它会下载整个表格。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-03-28
  • 2021-11-25
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多