如何安装 RODBC 以便使用 unixODBC?
How do I install RODBC so that is uses unixODBC?
在安装和配置 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。
事实证明,默认的 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 帮助我走上正轨。
在 Mac OS 10.13.3 High Sierra 上配置 unixODBC 后,我也遇到了这个问题。我尝试配置我的 .Renviron 为 ODBCINI 设置一个 R-specific 环境变量,但 RODBC 仍然不会列出我的数据源名称 (DSN)。此外,我无法找到 ODBCinst.ini 中指定的驱动程序,甚至无法获得使用 RODBC::ODBCDriverConnect() 的连接字符串,尽管能够与 isql 连接。
最终起作用的只是:
remove.packages('RODBC')
install.packages('RODBC', type="source")
似乎如果您在 mac 上从源代码安装 RODBC,它会正确地选择 odbc.ini 文件和 odbcinst.ini 文件。
多亏了这个 post 的微妙评论才能解锁密钥:
http://eriqande.github.io/2014/12/19/setting-up-rodbc.html
正确的方法是将 odbc 管理器指定到包的配置脚本中,就像这样
install.packages("RODBC",
type = "source",
INSTALL_opts="--configure-args='--with-odbc-manager=odbc'"
)
--with-odbc-manager=odbc
表示您要使用 unixODBC
--with-odbc-manager=iodbc
表示您要使用 iODBC
在安装和配置 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。
事实证明,默认的 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 帮助我走上正轨。
在 Mac OS 10.13.3 High Sierra 上配置 unixODBC 后,我也遇到了这个问题。我尝试配置我的 .Renviron 为 ODBCINI 设置一个 R-specific 环境变量,但 RODBC 仍然不会列出我的数据源名称 (DSN)。此外,我无法找到 ODBCinst.ini 中指定的驱动程序,甚至无法获得使用 RODBC::ODBCDriverConnect() 的连接字符串,尽管能够与 isql 连接。
最终起作用的只是:
remove.packages('RODBC')
install.packages('RODBC', type="source")
似乎如果您在 mac 上从源代码安装 RODBC,它会正确地选择 odbc.ini 文件和 odbcinst.ini 文件。
多亏了这个 post 的微妙评论才能解锁密钥: http://eriqande.github.io/2014/12/19/setting-up-rodbc.html
正确的方法是将 odbc 管理器指定到包的配置脚本中,就像这样
install.packages("RODBC",
type = "source",
INSTALL_opts="--configure-args='--with-odbc-manager=odbc'"
)
--with-odbc-manager=odbc
表示您要使用 unixODBC
--with-odbc-manager=iodbc
表示您要使用 iODBC