gpt4 book ai didi

oracle - 通过 ADODB 将数据从 Oracle 加载到 Excel - 性能问题

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

我们有一个使用 VBA、命名范围、ADODB 的大型 Excel 应用程序。它的主要功能是连接到 Oracle,将数据集加载到 Excel 中,允许用户对其进行编辑并将其保存回 Oracle。该应用程序在 Excel 2003 中,但我们一直想升级到 Excel 2007。我们现在在粘贴到 Excel 2003 应用程序时遇到“格式太多”错误,这是升级的一个很好的理由。

将 Excel 2003 保存为 Excel 2007 并运行 Oracle 加载 VBA 后,加载数据大约需要两倍的时间。我们实际上可以看到正在加载的记录,而在 Excel 2003 版本中,工作表中的记录只是压缩了页面。

所以我的第一个目标是提高这个性能。有两种方法可以做到这一点:

  • 找出 Excel 2007 比 Excel 2003 慢的原因并修复它
  • 改进数据加载例程

  • 关于第 1 项,我对其他任何人都感兴趣,他们可以阐明为什么在 2007 年与 2003 年相比,这样做需要更长的时间

    在第 2 项上,我正在考虑使用 GetString 将记录集转换为字符串并将其粘贴到工作表上(而不是一次添加一个单元格)。我也对以前做过这件事的人感兴趣。

    从 ADODB 转移到 Excel 工作表代码的一些经过清理的代码如下:
    While Not RECSET.EOF
    ' loop thru columns returned in sql row
    sExtractRec = ""
    For i = 1 To Column_Names.Count
    vColumnName = Column_Names(i)
    vItem = RECSET(vColumnName)
    vItem = formatIfDate(vItem, vColumnName) ' format if a date or datetime
    currCell.Value = vItem
    Set currCell = currCell.Offset(0, 1)
    If Not isNull(vItem) Then
    vItem = IIf(vItem = "", "", Replace(vItem, ";", " "))
    End If
    sExtractRec = sExtractRec & vItem & ";"
    Next i
    Set currCell = currCell.Offset(1, 0 - Column_Names.Count) ' goto first cell next row
    iRowCnt = iRowCnt + 1
    RECSET.MoveNext

    If bWriteExtractFile Then
    Print #iExtractFile, sExtractRec
    End If
    Wend

    最佳答案

    首先尝试在填充工作表时关闭屏幕更新并将计算设置为手动。

    我猜你现在不这样做了,因为你提到看着记录被逐行填充。

    关于oracle - 通过 ADODB 将数据从 Oracle 加载到 Excel - 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15237374/

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