Excel для удаленной базы данных Oracle с большими наборами данных (> 2000 записей). Сохраненный вызов proc с драйвером, который поддерживает FetchSize - PullRequest
2 голосов
/ 26 апреля 2011

Public Const connString = "Provider=OraOLEDB.Oracle;FetchSize=200;CacheType=Memory;" & _
    "Password=" & db_password & ";User ID=" & db_user & _
    ";Data Source=" & db_source

Sub GetEncyclopediaData()
    Dim MyConnection As New ADODB.Connection
    Dim MyResults As ADODB.Recordset
    Dim MyCommand As New ADODB.Command


    MyConnection.ConnectionString = connString
    MyConnection.Open

    MyCommand.ActiveConnection = MyConnection

    MyCommand.CommandType = adCmdStoredProc
    MyCommand.CommandText = "MKT_OWNER.ETP.p_ETPEncyclopedia"

  '  ETPEncyclopediaCommand.CommandType = adCmdText
  '  ETPEncyclopediaCommand.CommandText = "{ CALL MKT_OWNER.ETP.p_ETPEncyclopedia () }"

    MyCommand.Properties("PLSQLRSet") = True
    Set MyResults = MyCommand.Execute
    MyCommand.Properties("PLSQLRSet") = False

    While Not MyResults.EOF

        MyResults.MoveNext
    Wend


End SubEnd Sub

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

При использовании ADO в режиме хранимой процедуры передайте только имя хранимой процедуры в виде текста:

MyCommand.CommandType = adCmdStoredProc
MyCommand.CommandText = "MKT_OWNER.ETP.p_ETPEncyclopedia"

В качестве альтернативы, в текстовом режиме вы можете передать запрос:

MyCommand.CommandType = adCmdText
MyCommand.CommandText = "{ CALL MKT_OWNER.ETP.p_ETPEncyclopedia () }"
0 голосов
/ 28 апреля 2011

Не уверен, что вам нужно использовать ADODB, но я лично предпочитаю решение Oracle:

Dim OO4OSession As OraSession
Set OO4OSession = New OraSessionClass

Dim db As OraDatabase
Set db = OO4OSession.OpenDatabase("DEV02", "dev/dev_demo", 0)

db.Parameters.Add "CLIENT_ID", "1", ORAPARM_INPUT

Dim ds As OraDynaset
Set ds = db.CreateDynaset("SELECT NAME FROM CLIENT WHERE CLIENT_ID = :CLIENT_ID", 0)


db.Close

Set db = Nothing
Set OO4OSession = Nothing

Хорошая документация доступна здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...