首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RODBC无法识别我的odbc设置

RODBC无法识别我的odbc设置
EN

Stack Overflow用户
提问于 2012-12-11 20:47:10
回答 3查看 13K关注 0票数 17

我在Red Hat Linux6服务器上运行R 2.15.2。我的目标是通过RODBC连接到另一台机器上的MS SQL Server数据库。我做了研究,并从the microsoft support website下载并安装了MS SQL ODBC驱动程序的linux版本。我希望从源代码中构建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>

所以我知道我已经正确设置了我的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

下面是R中odbcDataSources命令的结果:

> odbcDataSources()
named character(0)

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

有人能为我解释一下吗?我不确定我是否正确地理解了环境变量在linux中是如何工作的,特别是为什么isql连接起来没有问题,而RODBC甚至找不到驱动程序/数据源。

注意:当我安装了unixODBC的repo版本时,在R中使用install.packages('RODBC')命令可以很好地安装RODBC。但是,在我从源代码安装unixODBC 2.3.0之后,由于依赖问题,RODBC安装将失败,我必须使用guide posted here从源代码安装RODBC。有没有可能我一开始就没有正确地配置ODBC,这就是我现在遇到麻烦的原因?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-24 05:48:52

哇,我还以为我是唯一一个研究这种东西的人呢。我不得不解决同样的问题,发现最好的解决方案是使用rjdbc。这很容易配置,因为在linux或osx上的ODBC非常参差不齐。RJDBC的性能非常好,因为它使用本地的ms sql server jar来执行查询。下面是我们的一个脚本中的一个例子。您只需从微软下载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]")); 
票数 6
EN

Stack Overflow用户

发布于 2015-02-20 09:07:27

它找不到驱动程序,因为您没有指定它!我也不明白DSN的东西是如何工作的,但在类似的情况下,这对我是有效的:

ch <- odbcDriverConnect('driver={SQL Server};server=servername;database=databasename;uid=username;pwd=password;')
sqlQuery(ch,'sql script',stringsAsFactors = FALSE)

当然,它需要精确。并将{SQL Server}替换为您拥有的任何驱动程序。这是最棘手的部分。servername与Management Studio中的下拉列表中出现的内容相同,在您的示例中可能是"test“。isql必须自动使用正确的驱动程序。

例如,对于MySQL,它可能是:

Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;

我只是搜索"mysql odbc连接字符串“,而不是任何特定于R的东西。

票数 2
EN

Stack Overflow用户

发布于 2018-03-27 06:19:11

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

我能够让JDBC连接工作,但我不想依赖于JVM,而且我已经有了一个为RODBCext编写的重要数据库访问代码。

最终成功的原因很简单:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13820745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档