如何安装RODBC以便使用unixODBC?

时间:2017-11-02 14:16:39

标签: sql-server r freetds rodbc 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。

3 个答案:

答案 0 :(得分:1)

原来默认的RODBC软件包安装不能与unixODBC一起使用。这是重新编译和安装RODBC的过程。

  1. 通过R控制台删除当前的通用RODBC包。

    >remove.packages("RODBC")
    Removing package from ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library’
    (as ‘lib’ is unspecified)
    
  2. 下载RODBC的来源。

      

    https://cran.r-project.org/src/contrib/RODBC_1.3-15.tar.gz

  3. 将环境变量DYLD_LIBRARY_PATH设置为unixODBC库所在的位置。我使用自制软件来安装unixODBC,所以我的库位于/ usr / local / lib中。

    export DYLD_LIBRARY_PATH=/usr/local/lib

  4. 现在重新安装RODB,以便它获取新的库位置。

    R CMD INSTALL /Users/xxxxxx/Downloads/RODBC_1.3-15.tar.gz

  5. 有相当多的输出,但看到最后,你应该看到这样的东西。

    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