安装和配置FreeTDS和unixODBC并确认它们正常工作后,我正在尝试配置RODBC。但是,在尝试在R控制台中查看ODBC数据源时,我得到以下结果。
> odbcDataSources()
named character(0)
如果我尝试使用FreeTDS驱动程序,我会得到以下结果。
>odbcDriverConnect("driver={FreeTDS};server=xx.xx.xx.xx;port=1433;database=XXXX_Analysis;trusted_connection=true;UID=********;PWD=********") :
[RODBC] ERROR: state IM003, code 0, message [iODBC][Driver Manager]Specified driver could not be loaded
根据错误,看起来RODBC正在尝试使用iODBC而不是unixODBC。我不知道如何配置RODBC以使用unixODBC。
答案 0 :(得分:1)
原来默认的RODBC软件包安装不能与unixODBC一起使用。这是重新编译和安装RODBC的过程。
通过R控制台删除当前的通用RODBC包。
>remove.packages("RODBC")
Removing package from ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library’
(as ‘lib’ is unspecified)
下载RODBC的来源。
将环境变量DYLD_LIBRARY_PATH设置为unixODBC库所在的位置。我使用自制软件来安装unixODBC,所以我的库位于/ usr / local / lib中。
export DYLD_LIBRARY_PATH=/usr/local/lib
现在重新安装RODB,以便它获取新的库位置。
R CMD INSTALL /Users/xxxxxx/Downloads/RODBC_1.3-15.tar.gz
有相当多的输出,但看到最后,你应该看到这样的东西。
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o RODBC.so RODBC.o -lodbc -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /Library/Frameworks/R.framework/Versions/3.4/Resources/library/RODBC/libs
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
* DONE (RODBC)
注意-L/usr/local/lib
表示已选择库位置。
现在您应该能够看到unixODBC提供的ODBC连接。回到重新启动的R控制台,您可以键入以下内容以验证RODBC正在使用unixODBC。
> library("RODBC")
> odbcDataSources()
MYMSSQL1 MYMSSQL XXXXXXXXX_C_DB XXXXXXXX-SQL1
"FreeTDS" "FreeTDS" "FreeTDS" "FreeTDS"
感谢hiltmon帮助我走上正轨。
答案 1 :(得分:1)
在Mac OS 10.13.3 High Sierra上配置unixODBC后,我也遇到了这个问题。我尝试配置.Renviron为ODBCINI设置R特定的环境变量,但RODBC仍然不会列出我的数据源名称(DSN)。此外,我无法找到ODBCinst.ini中指定的驱动程序,甚至无法使用RODBC :: ODBCDriverConnect()获取连接字符串,尽管能够与isql连接。
最终工作的原因很简单:
remove.packages('RODBC')
install.packages('RODBC', type="source")
看起来如果你从mac上安装了RODBC,它会正确地选择odbc.ini文件和odbcinst.ini文件。
感谢这篇文章对解锁密钥的微妙评论: http://eriqande.github.io/2014/12/19/setting-up-rodbc.html
答案 2 :(得分:0)
执行此操作的正确方法是为软件包的配置脚本指定odbc管理器,如下所示
install.packages("RODBC",
type = "source",
INSTALL_opts="--configure-args='--with-odbc-manager=odbc'"
)
--with-odbc-manager=odbc
表示您要使用unixODBC
--with-odbc-manager=iodbc
表示您要使用iODBC