RODBC无法识别我的odbc设置

ver*_*lcw 17 linux r unixodbc rodbc

我在Red Hat Linux 6服务器上运行R 2.15.2.我的目标是通过RODBC连接到另一台机器上的MS SQL Server数据库.我做了我的研究,并从微软支持网站下载并安装了Linux版本的MS SQL ODBC驱动程序.我从源代码构建了unixODBC版本2.3.0,因为它是windows驱动程序所必需的,并且还没有在RHL repos中(repo版本是2.2.14).

无论如何,经过一些工作,我终于安装并正确配置了驱动程序,并且我可以通过isql命令成功连接到SQL Server数据库:

$ isql -v test testuser testpass
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
Run Code Online (Sandbox Code Playgroud)

所以我知道我有我odbc.iniodbcinst.ini文件正确设置.

但是,当我尝试从R中访问ODBC连接时,会发生以下情况:

> test <- odbcDriverConnect('DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass')
Warning messages:
1: In odbcDriverConnect("DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass") :
   [RODBC] ERROR: state IM002, code 0, message [unixODBC][Driver Manager]Data 
   source name not found, and no default driver specified
2: In odbcDriverConnect("DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass") :
   ODBC connection failed
Run Code Online (Sandbox Code Playgroud)

这是odbcDataSourcesR中命令的结果:

> odbcDataSources()
named character(0)
Run Code Online (Sandbox Code Playgroud)

我一直在做一些研究,我认为解决方案(尽管我可能是错的)可能与正确配置ODBC环境变量有关,这样RODBC就知道去哪里找odbc.ini.根据我的研究,我发现了以下可能相关的环境变量:$ODBCINI, $ODBCSYSINI, $ODBC_ROOT $ODBC_INCLUDE, and $ODBC_LIBS. 我对这些应该设置的内容有一个合理的认识,但我不确定如何永久设置它们,以便RODBC可以识别在哪里可以找到适当的文件.

任何人都可以为我阐明这一点吗?我不确定我是否正确理解环境变量在linux中是如何工作的,特别是为什么isql连接没有问题,但是RODBC甚至找不到驱动程序/数据源.

注意:当我安装了unixODBC的repo版本时,RODBC将使用install.packages('RODBC')R中的命令安装得很好.但是,在我从源安装unixODBC 2.3.0之后,由于依赖性问题,RODBC安装将失败,我不得不使用此处发布指南从源代码安装RODBC .是否有可能我无法正确配置ODBC,这就是为什么我现在遇到麻烦?

Chr*_*haw 5

哇,我以为我是唯一一个从事这类工作的人.我不得不解决同样的问题,发现最好的解决方案是使用rjdbc.这更容易配置,因为Linux或osx上的ODBC非常参差不齐.RJDBC性能很好,因为它使用本机ms sql server jar来执行查询.以下是我们的一个脚本中的示例.您只需从microsoft下载sqljdbc4.jar,然后将install.package("RJDBC")下载到您的环境中.我意识到你正在努力让ODBC工作,我确实让它在osx上工作,但我放弃了由于时间的Linux.

library(RJDBC);  

drv <- JDBC('com.microsoft.sqlserver.jdbc.SQLServerDriver', '/usr/local/project/dataproviders/jdbc/sqljdbc4.jar', identifier.quote="'"); 

ch <- dbConnect(drv, 'jdbc:sqlserver://the.server.address.net;databaseName=DataWarehouse', 'USERNAME', 'PASSWORD'); 

allsupp_allprod_allproc <- dbGetQuery(ch, paste("SELECT  [Date], Sum([Fail]) as Numerator, Sum([Pass] + [Fail]) as Denominator,'' as Annotation,'True'  as 'Use for CL' FROM [PSU_YieldData] Group by [Date] Order by [Date]")); 
Run Code Online (Sandbox Code Playgroud)