代码之家  ›  专栏  ›  技术社区  ›  ejames

如何安装RODBC,使其使用unixODBC?

  •  1
  • ejames  · 技术社区  · 7 年前

    在安装和配置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 回复  |  直到 7 年前
        1
  •  2
  •   Jim    5 年前

    正确的方法是将odbc管理器指定给包的配置脚本,如下所示

    install.packages("RODBC", 
     type = "source", 
     INSTALL_opts="--configure-args='--with-odbc-manager=odbc'"
    )
    

    --with-odbc-manager=odbc 表示要使用unixODBC
    --with-odbc-manager=iodbc 表示要使用iODBC

        2
  •  1
  •   Nadir Sidi    7 年前

    在Mac OS 10.13.3 High Sierra上配置unixODBC后,我也遇到了这个问题。我尝试配置我的。Renviron为ODBCINI设置了一个特定于R的环境变量,但RODBC仍然不会列出我的数据源名称(DSN)。此外,我无法找到ODBCinst中指定的驱动程序。尽管能够与isql连接,但ini甚至可以获得一个使用RODBC::ODBCDriverConnect()的连接字符串。

    最终起作用的只是:

    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

        3
  •  0
  •   ejames    7 年前

    结果是默认的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\u LIBRARY\u 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

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

    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