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/ для вашей конкретной строки подключения. Это тот, который я использовал.