ODBC отлично работает в MS Excel, но не в R
Я установил свой драйвер ODBC, чтобы MS Excel мог импортировать данные в электронную таблицу, только отлично.
Однако, когда я пытаюсь установить соединение с R, используя
ch <- odbcConnect(leprosyDHISdb, uid = leprosyDHISid, pwd = leprosyDHISpw)
Затем я получаю ошибку
Warning messages:
1: In odbcDriverConnect("DSN=dhis2;UID=dhis2_viewer;PWD=*********") :
[RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
2: In odbcDriverConnect("DSN=dhis2;UID=dhis2_viewer;PWD=*********") :
ODBC connection failed
Что может сделать сбой odbc для R, но не для Excel?
Ответы
Ответ 1
Не уверен, что это самый правильный способ сделать это, но это сработало для меня.
- Перейдите в электронную таблицу в excel с импортированными данными.
- Нажмите "Данные" → "Подключения"
- Дважды щелкните запрос
- Перейдите на вкладку "Определение"
-
Скопируйте строку Connection и вставьте ее в R внутри функции odbcDriverConnect
:
myConn < -odbcDriverConnect ( "DRIVER = SQL Server; SERVER = fooServer; UID = foo_viewer; PWD = 1pityDfoo!; APP = Microsoft Office 2010; WSID = foocomputername; DATABASE = DTS" )
-
Вы также можете скопировать текст команды и вставить ее в R внутри функции sqlQuery
:
mydata < - sqlQuery (myConn, "SELECT DTS.dts_id, DTS.dts_no, DTS.unit_code, DTS.originator, DTS.doc_type_id, DTS.doc_date, DTS.subject, DTS.remarks, DTS.status, DTS.is_confidential, DTS.created_by, DTS.date_created, DTS.updated_by, DTS.date_updated, DTS.timestamp FROM DTS.dbo.DTS DTS" )
Ответ 2
Проверьте, используете ли вы 32/64-разрядную версию R, также проверьте, установлено ли соединение ODBC 32/64 бит.
Для установки 32-битного DSN с использованием окон перейдите к следующей папке
C:\Windows\SysWOW64
Для установки 64-битного DSN с использованием окон перейдите к следующей папке
C:\Windows\System32
EDIT: следующий блог - отличное руководство, которое вы можете найти полезным
http://sandymuspratt.blogspot.co.uk/2013/01/getting-access-data-into-r.html
Ответ 3
У меня была такая же проблема в последнее время. Вот как я это решил:
1) Перейдите на страницу: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html и выберите для вас соответствующую ОС и версию.
2) Загрузите пакет, используя ссылку в разделе "Мгновенный клиентский пакет - ODBC: дополнительные библиотеки для включения приложений ODBC"
3) Извлеките файлы с диска C как C:\instantclient_12_1 и запустите файл odbc_install.exe.
4) Попробуйте снова подключиться.
Ответ 4
Эта работа помогла мне:
- Перейдите к администратору источника данных ODB ([Win] + ODBC...)
- Добавить новый DNS (не имеет значения, какой тип, поддерживающий User DNS); укажите источник в желаемую БД и назовите новый DNS (например, dbAdHocForR)
- Вернитесь к R, чтобы определить канал (просто вызовите DNS без каких-либо дополнительных параметров): ch < - odbcConnect ( "SQL Server" )
- Определите SQL-запрос, используя канал: q1 <-sqlQuery (ch, "выберите top 1000 * из dbo.RTestTable" )
Ответ 5
Попробуйте использовать odbcDriverConnect и строку подключения.
ch <- odbcDriverConnect("Driver={Oracle in OraClient11g_home1};Dbq=leprosyDHISdb;Uid=leprosyDHISid;Pwd=leprosyDHISpw;")
Вам может потребоваться проверить https://www.connectionstrings.com/ для вашей конкретной строки подключения. Это тот, который я использовал.