Хобрук: Ваш путь к мастерству в программировании

dbConnect в R завершается с ошибкой DSN при выполнении сценария, вызванного из пакетного файла.

У меня 64-битная версия R версии 3.6.0, установленная на моей машине с Windows 10.

Я использую следующий код, чтобы установить соединение с локальной базой данных MySQL на моем компьютере.

library(DBI)
con <- dbConnect( odbc::odbc(),"my_dsn")

где my_dsn — это 64-разрядный системный DSN для базы данных MySQL, определенный в администраторе источника данных ODBC.

Выполнение этого кода в новом сеансе R Studio или R GUI работает и предоставляет ожидаемый объект подключения. Поэтому я сохраняю код в R-скрипт по адресу C:/some_folder_location/my_script.R.

Теперь я хочу вызвать скрипт из пакетного файла. Пакетный файл содержит следующий код:

cd /d C:\some_folder\
"C:\Program Files\R\R-3.6.0\bin\i386\Rscript.exe"  my_script.R
pause

Когда я запускаю пакетный файл, я получаю следующую ошибку:

Ошибка: nanodbc/nanodbc.cpp:950: IM014: [Microsoft][Диспетчер драйверов ODBC] Указанный DSN содержит несоответствие архитектуры между драйвером и приложением.

Казнь остановлена

Итак, мой вопрос: почему этот код внезапно не работает при выполнении пакетным файлом? В сообщении об ошибке, похоже, говорится о проблеме с DSN, но мы знаем, что это не так, поскольку скрипт без проблем запускается непосредственно из консоли.

21.11.2019

Ответы:


1

Обычно эта ошибка возникает при несоответствии 32/64-битного драйвера и 32/64-битной платформы. У вас могут быть установлены две версии R (т. е. две разные Rscript.exe) в зависимости от типа платформы (32-разрядная и 64-разрядная), что дополнительно усложняется версиями (3.2 против 3.5). Например:

  • Ваш Rscript.exe указывает на 32-разрядную версию R с подпапкой i386, которая несовместима с 64-разрядным DSN.
  • На вашем RStudio и RGui может быть установлена ​​64-битная версия R, совместимая с вашим DSN. Свяжитесь с R.home(). Это то же самое, что и папка с пакетным файлом? Если нет, используйте Rscript.exe в bin этого каталога.

Чтобы проверить доступные источники данных в R GUI или пакетном инструменте, вызовите следующий код и сравните результаты:

library(odbc) 

odbcListDataSources()    # SEE IF DSN SHOWS
odbcListDrivers()        # SEE IF DSN USES AVAILABLE DRIVER
21.11.2019
  • Спасибо за ответ! Таким образом, R.home() вернул C:/PROGRA~1/R/R-36~1.0 как из консоли RStudio, так и из вывода пакетного файла (при добавлении в вызванный скрипт), но список DSN был другим (слишком длинный, чтобы вставлять его сюда), с отсутствующим целевым DSN. У меня есть один вопрос: если Rscript.exe, который я вызываю, указывает на 32-разрядную версию, и эта версия совпадает с версией, возвращаемой R.home() в консоли RStudio, и код работает в консоли RStudio, что позволяет ему работать в этой среде? Основываясь на ваших полезных советах, я ожидаю, что в RStudio произойдет сбой... 21.11.2019
  • Внутри папки bin R.home есть несколько подпапок, отличных от i386? Кроме того, отображается ли DSN в результатах RStudio? Вы упоминаете разные списки. Проверьте, на какой платформе вы работаете: Sys.info()[["machine"]] . 22.11.2019
  • Новые материалы

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..