Сбой CopyFromRecordset в Server 2012, но не в Windows 7 или Windows 10 в VBA / Excel - PullRequest
0 голосов
/ 21 марта 2019

У меня есть документ Excel, который использует ADO для подключения к базе данных BASIS и использует SQL для сбора данных.Данные помещаются в набор записей и затем отображаются на рабочем листе с использованием CopyFromRecordset.

Этот процесс отлично работает в Excel в Windows 7 и Windows 10, однако, когда я запускаю ту же электронную таблицу на нашем терминальном сервере под управлением WindowsServer 2012 R2 Я получаю сообщение об ошибке «Метод CopyFromRecordset» объекта «Range» не выполнен.Номер ошибки -2147417848.

Я прочитал много сообщений, в которых утверждается, что проблема в слишком большом количестве данных, слишком большом количестве столбцов или слишком большом количестве строк, но я изменил свой запрос, чтобы ввести 1 поле, в1 запись данных, также, запрос со всеми данными отлично работает на Windows 7 и 10.

Когда я вводить информацию с помощью connection.OpenSchema в набор записей и отображать, что данные на листе нет проблем, но когда я использую resultset.open или connection.execute для ввода данных поля, я каждый раз получаю сообщение об ошибке.

Кроме того, когда я использую такие функции, как movefirst и movenext в наборе записей openschema, проблем нет, но когда я использую эти функции в наборе записей полевых данных Excel полностью аварийно завершает работу и выдает мне следующие сведения о проблеме.

Подпись проблемы: Проблема Имя события: APPCRASH Имя приложения: EXCEL.EXE Версия приложения: 16.0.4690.1000 Метка времени приложения: 5acd084f Имя модуля ошибки: BBjODBC.dll Версия модуля ошибки: 16.2.4.0 ОшибкаМетка времени модуля: 58d03d38 Код исключения: c0000005 Смещение исключения: 0000000000179cc1 Версия ОС: 6.3.9600.2.0.0.16.7 Идентификатор локали: 1033

Ниже приведены соответствующие части кода, который я использую.

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    cn.ConnectionString = "DSN=ODBC_RIC;UID=RIC;"
    cn.Open

    cmdText = "select * from prospectmaster"

    'I tried all these open combinations
    'rs.Open cmdText, cn, adOpenDynamic, adLockReadOnly
    'rs.Open cmdText, cn, adOpenForwardOnly, adLockOptimistic
    'rs.Open cmdText, cn, adOpenDynamic, adLockPessimistic
    'rs.Open cmdText, cn, adOpenDynamic, adLockOptimistic
    'rs.Open cmdText, cn, adOpenDynamic, adLockUnspecified
    'rs.Open cmdText, cn, adOpenUnspecified, adLockUnspecified

    'I settled on this one that works everywhere else    
    Set rs = cn.Execute(cmdText)

    ' Display Headers (works Fine)
    For n = 0 To rs.Fields.Count - 1
        Range("A6").Offset(0, n).Value = rs.Fields(n).Name
    Next n

   ' Display the data (does not work fine)
    Range("A7").CopyFromRecordset rs

    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

Я не знаю, что делать дальше.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 21 марта 2019

Я обнаружил, что проблема в том, что мой драйвер odbc был 32-разрядным и работал только с 32-разрядными версиями Excel. Компьютер, на котором я его тестировал, был 64-битным. Я установил правильную версию Office, и она работала. В качестве альтернативы, я мог бы установить правильный драйвер, и он тоже работал бы так.

...