У меня есть документ 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
Я не знаю, что делать дальше.Любая помощь будет оценена.