Подключение к Oracle 10g с ODBC из Excel VBA - PullRequest
0 голосов
/ 13 ноября 2009

Следующий код работает. соединение открывается нормально, но recordset.recordCount всегда возвращает -1, когда в таблице есть данные. И если я пытаюсь вызвать какие-либо методы / свойства набора записей, это приводит к сбою Excel. Есть идеи?? Спасибо

Sub GetData()
    Dim conn As New ADODB.connection    
    Dim connString
    connString = "DSN=name;Uid=user;Pwd=pass"
    Dim rsRecords As New ADODB.recordSet

    conn.Open connString
    rsRecords.CursorLocation = adUseServer
    rsRecords.Open "select * from xxx", conn, adOpenForwardOnly, adLockReadOnly

    If conn.State = adStateOpen Then
      MsgBox rsRecords.RecordCount
    Else
       MsgBox "no connection"
    End If

    rsRecords.Close
    Set rsRecords = Nothing
    conn.Close
    Set conn = Nothing
End Sub

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Если вы хотите, чтобы Recordcount работал, особенно без извлечения записей, вам нужно использовать adUseClient, а не adUseServer

Если это большая операция, и вы будете делать это часто, тем не менее, вы должны вместо этого выбрать count () и заставить базу данных выполнять подсчет за вас. С adUseClient ADO будет автоматически извлекать все записи в память вашего приложения, нравится вам это или нет.

0 голосов
/ 16 ноября 2009

Похоже, что в Excel произошел сбой, поскольку он не может обработать некоторые типы данных Oracle. Функция select * возвращала столбец типа TIMESTAMP (3) WITH TIME ZONE. Это приведет к аварийному завершению работы Excel, как только я попытаюсь прочитать данные из набора записей.

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