У меня 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, но мы знаем, что это не так, поскольку скрипт без проблем запускается непосредственно из консоли.
R.home()
вернул C:/PROGRA~1/R/R-36~1.0 как из консоли RStudio, так и из вывода пакетного файла (при добавлении в вызванный скрипт), но список DSN был другим (слишком длинный, чтобы вставлять его сюда), с отсутствующим целевым DSN. У меня есть один вопрос: если Rscript.exe, который я вызываю, указывает на 32-разрядную версию, и эта версия совпадает с версией, возвращаемойR.home()
в консоли RStudio, и код работает в консоли RStudio, что позволяет ему работать в этой среде? Основываясь на ваших полезных советах, я ожидаю, что в RStudio произойдет сбой... 21.11.2019R.home
есть несколько подпапок, отличных отi386
? Кроме того, отображается ли DSN в результатах RStudio? Вы упоминаете разные списки. Проверьте, на какой платформе вы работаете:Sys.info()[["machine"]]
. 22.11.2019