【问题标题】:Memory issue with query of huge table from Oracle database with ADO in Excel VBA在 Excel VBA 中使用 ADO 从 Oracle 数据库查询大表的内存问题
【发布时间】:2013-11-26 14:23:44
【问题描述】:

我需要使用 VBA 从 Oracle 数据库中查询一个大数据表(2.000.000 行和 130 列)并将其保存到文本文件中。

我使用的代码如下

Dim DBConnection As ADODB.connection
Dim RecordSet As ADODB.RecordSet

'prepare string for connection
Dim strConnection As String
strConnection = "DRIVER=Oracle in OraClient11g_Home32;SERVER=" & database & " ;UID=" & username & ";PWD=" & password & ";DBQ=" & database & ";"

Set DBConnection = New ADODB.connection

'open connection
With DBConnection
    .CommandTimeout = False
    .ConnectionString = strConnection
    .CursorLocation = adUseClient
    .Open
End With


Set RecordSet = New ADODB.RecordSet
RecordSet.Open strSQLQuery, DBConnection, adOpenForwardOnly, adLockReadOnly

Do While RecordSet.EOF = False

    str = ""
    For x = 0 To RecordSet.Fields.Count - 1
        If IsNumeric(RecordSet.Fields(x).Value) Then
            dx = RecordSet.Fields(x).Value
            str = str & Format(dx, "0.############") & delimiter
        Else
            str = str & RecordSet.Fields(x).Value & delimiter
        End If
    Next x
    Print #FH, str

    RecordSet.MoveNext

Loop

问题可能是 ADO 试图在记录集中存储所有查询的数据,这将是几 GB 的数据,因此使用了太多的 RAM。

我需要找到一种方法来限制一次存储在 RAM 中的行数,以便我可以下载和保存任意多的行,而不会对 RAM 产生任何问题。

我进行了研究,但找不到任何相关信息。

谢谢。

【问题讨论】:

  • 您是否尝试过在ADODB.RecordSet 对象上使用Filter 属性?

标签: oracle excel vba ado adodb


【解决方案1】:

也许你应该尝试将CursorLocation 设置为adUseServer...

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多