RODBC不承认我的ODBC设置(RODBC not recognizing my odbc set

2019-08-03 21:45发布

我在Red Hat Linux 6服务器上运行v 2.15.2。 我的目标是通过RODBC连接到MS SQL Server数据库另一台机器上。 我做我的研究,并下载和安装从MS SQL ODBC驱动程序的Linux版本的微软支持网站 。 我到了从源代码编译的unixODBC版本2.3.0,因为它是由Windows驱动程序需要的,而不是在RHL尚未回购(回购版本2.2.14是)。

总之,一些工作之后,我终于安装并正确配置的驱动程序,我可以通过一个成功地连接到SQL Server数据库isql命令:

$ 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

这里的结果odbcDataSources在R指令:

> odbcDataSources()
named character(0)

我一直在做一些研究,我认为解决的办法(虽然我可能是错的),可能有一些做正确配置ODBC环境变量,这样RODBC知道去哪里找odbc.ini 。 根据我的研究,我发现下面的环境变量,可能是相关的: $ODBCINI, $ODBCSYSINI, $ODBC_ROOT $ODBC_INCLUDE, and $ODBC_LIBS. 我有什么,这些应该被设置为一个合理的想法,但我不知道如何永久地设置他们,让RODBC能够识别在哪里可以找到相应的文件。

任何人都可以提供一些线索这对我来说? 我不知道我正确理解环境变量在Linux中是如何工作的,特别是为什么isql具有连接没有问题,但RODBC甚至无法找到驱动程序/数据源。

注:当我已经安装了unixODBC的回购版本,RODBC会使用安装就好install.packages('RODBC')在R命令。然而,我从源代码安装了unixODBC 2.3.0之后,RODBC安装会失败,因为依赖问题,我不得不使用从源代码安装RODBC 这里发布指南 。 是否有可能我没能正确地配置ODBC开始用,这就是为什么我有现在的麻烦?

Answer 1:

哇,我想我是在这种东西的工作的唯一的人。 我不得不解决同样的问题,找到了最好的解决方案是使用rjdbc。 这是很容易在Linux或OSX配置为ODBC是非常参差不齐。 RJDBC表现是伟大的,因为它使用本地MS SQL Server的罐子来执行查询。 下面是一个例子右出我们的脚本之一。 你只需要从微软下载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]")); 


Answer 2:

它找不到驱动程序,因为你没有指定它! 我不明白的东西,DSN应如何擦出火花,但是这对我的作品了类似的情况:

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

它需要准确的,当然。 和替换{SQL服务器}与你有任何的驱动程序。 这是棘手的部分。 该servername是你的情况Management Studio中出现在下拉列表中,可能是“测试”同样的事情。 ISQL必须自动使用正确的驱动程序。

即针对MySQL的可能是:

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

我只是搜索“MySQL的ODBC连接字符串”,并没有什么具体的[R。



Answer 3:

在Ubuntu服务器我设置这样的


  • 编辑〜/ .bash_profile中

    nano ~/.bash_profile

  • 收藏此线路

    export ODBCINI=/usr/local/etc/odbc.ini export ODBCSYSINI=/usr/local/etc


然后RODBC将工作不错。



Answer 4:

我也有在Mac OS 10.13.3海伊谢拉配置后的unixODBC这个问题。 我试图配置我的.Renviron设置一个特定的R-环境变量ODBCINI,但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



文章来源: RODBC not recognizing my odbc settings