RODBC不能识别我的odbc设置

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

无论如何,经过一些工作,我终于得到了安装和configuration正确的驱动程序,我可以通过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) 

我一直在做一些研究,我认为解决scheme(虽然我可能是错的)可能与正确configurationODBC环境variables有关,以便RODBC知道去哪里去找odbc.ini 。 根据我的研究,我发现了以下可能相关的环境variables: $ODBCINI, $ODBCSYSINI, $ODBC_ROOT $ODBC_INCLUDE, and $ODBC_LIBS. 我有一个合理的想法,应该设置什么,但我不知道如何永久设置它们,以便RODBC可以识别在哪里find适当的文件。

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

注意:当我安装了unixODBC的repo版本时,RODBC会在R中使用install.packages('RODBC')命令安装得很好。但是,从源代码安装unixODBC 2.3.0之后,RODBC安装将会失败,因为一个依赖性问题,我不得不使用从这里发布的指南从源代码安装RODBC。 有没有可能我没有正确configurationODBC开始,这就是为什么我现在有麻烦?

Solutions Collecting From Web of "RODBC不能识别我的odbc设置"

哇,我以为我是唯一一个从事这种工作的人。 我不得不解决同样的问题,发现最好的解决方案是使用rjdbc。 这在Linux上配置为ODBC更容易,或者osx非常多。 RJDBC的性能是伟大的,因为它使用本机ms sql服务器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]")); 

在Ubuntu服务器中,我这样设置


  • 编辑〜/ .bash_profile

    nano〜/ .bash_profile

  • 添加这个

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


然后RODBC工作很好。

它没有找到驱动程序,因为你没有指定它! 我不明白DSN是如何工作的,但是对于我来说也是如此:

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

它当然需要是确切的。 并用你拥有的任何驱动替换{SQL server}。 这是一个棘手的部分。 服务器名称与Management Studio中的下拉菜单相同,在您的情况下可能是“测试”。 isql必须自动使用正确的驱动程序。

即对于MySQL可能是:

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

我只是搜索“mysql odbc连接字符串”,而不是任何R具体。