【问题标题】:Use DBEngine with Run-time Access将 DBEngine 与运行时访问一起使用
【发布时间】:2015-09-29 10:42:52
【问题描述】:

我尝试将我的 xls 与 access 数据库连接。当我在我的机器上安装完全访问程序时,下面的代码工作得更好。问题是当我尝试在只安装了运行时访问版本的机器上使用它时。

我已经使用了这个参考:


Visual Basic For Applications
Microsoft Excel 14.0 Object Library
OLE Automation
Microsoft Office 14.0 Object Library
Microsoft Forms 2.0 Object Library

当我尝试运行以下代码时出现错误:ActiveX 组件无法创建对象或返回对此对象的引用(错误 429)

Sub mcGetPromoFromDB()
    Application.ScreenUpdating = False

    Dim daoDB            As DAO.Database
    Dim daoQueryDef      As DAO.QueryDef
    Dim daoRcd           As DAO.Recordset

    'Error on line below
    Set daoDB = Application.DBEngine.OpenDatabase("K:\DR04\Groups\Functional\DC_Magazyn\Sekcja_Kontroli_Magazynu\Layout\dbDDPiZ.accdb")
    Set daoRcd = daoDB.OpenRecordset("kwPromoIDX", dbOpenDynaset)

    Dim tempTab() As Variant

    For Each Article In collecArticle
        daoRcd.FindNext "IDX = " & Article.Index
        Article.PromoName = daoRcd.Fields(1).Value
        Article.PromoEnd = "T" & Format(daoRcd.Fields(2).Value, "ww", vbMonday, vbUseSystem)
    Next

    Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 如果你要提前绑定代码,你真的应该设置一个 DAO 引用。如果没有安装 Access 就无法使用,您可以改用 ADO。
  • 好的,我尝试改用ADO,但是速度很慢,有什么方法可以加快这段代码的速度吗?我使用
    rsADO.Find "Indeks = " & Article.Index, 0, adSearchForward, 1 在记录集中查找。
  • 您是否尝试过过滤?还是只返回符合您条件的记录而不是整个表,这样您要搜索的记录就更少了?
  • 我现在试过了,但我没有看到任何差异。问题是我必须在 120k 查询中查找 6k 记录。

标签: vba excel dao


【解决方案1】:

IDX 是索引字段吗?

kwPromoIDX 是否针对此特定目的进行了优化?我的意思是它只包含此更新所需的字段,还是您要提取额外的无用字段?也许像“SELECT IDX, [Field1Name], [Field2Name] FROM kwPromoIDX”这样的东西会更有效。

由于您只是读取表记录,并且似乎不需要实际编辑它们而不是dbOpenDynaset,因此请使用dbOpenSnapshot

只是在这里抛出一个想法,您必须测试它是否有任何不同,但也许您可以尝试颠倒您的逻辑。逐个循环遍历记录集并在工作表中找到 IDX。

我过去做过的另一件事是使用 .CopyFromRecordset 并将整个记录集复制到一个临时工作表中,并完全在 Excel 中来回处理,以消除来回。

最后,另一种方法是快速遍历整个记录集并填充数组、集合等,然后使用它而不是 Access。这样,数据都是虚拟的,您可以减少与 Access 的来回。

您需要进行一些测试,看看哪种方法最适合您的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2022-11-15
    相关资源
    最近更新 更多