由批处理文件

时间:2019-11-21 15:04:47

标签: mysql r odbc r-dbi

我在Windows 10计算机上安装了64位R版本3.6.0。

我使用以下代码在我的计算机上建立与本地MySQL数据库的连接

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

其中my_dsn是ODBC数据源管理器中定义的MySQL数据库的64位系统DSN。

在全新的R Studio或R GUI会话中执行此代码是可行的,并提供了预期的连接对象。因此,我将代码保存到C:/some_folder_location/my_script.R的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存在问题,但我们知道,事实并非如此,因为脚本可以直接从控制台运行而不会出现问题。

1 个答案:

答案 0 :(得分:0)

通常,由于32/64位驱动程序和32/64位平台不匹配而发生错误。根据平台类型(32位和64位),您可能安装了两个版本的R(即,两个不同的Rscript.exe),而版本(3.2和3.5)进一步复杂。例如:

  • 您的Rscript.exe表示带有子文件夹i386的32位R版本,该子文件夹与64位DSN不兼容。
  • 您的RStudio和RGui可能正在运行与您的DSN兼容的64位R版本。检查R.home()。 这与批处理文件夹相同吗?如果不是,请在此目录的bin中使用Rscript.exe

要在R GUI或批处理工具中检查可用数据源,请调用以下命令并比较结果:

library(odbc) 

odbcListDataSources()    # SEE IF DSN SHOWS
odbcListDrivers()        # SEE IF DSN USES AVAILABLE DRIVER