Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux RODBC无法识别我的odbc设置_Linux_R_Unixodbc_Rodbc - Fatal编程技术网

Linux RODBC无法识别我的odbc设置

Linux RODBC无法识别我的odbc设置,linux,r,unixodbc,rodbc,Linux,R,Unixodbc,Rodbc,我正在Red Hat Linux 6服务器上运行R2.15.2。我的目标是通过RODBC连接到另一台机器上的MS SQL Server数据库。我做了研究,从下载并安装了linux版本的MS SQL ODBC驱动程序。我必须从源代码处构建unixODBC 2.3.0版,因为它是windows驱动程序所必需的,并且还不在RHL repo中(repo版本是2.2.14) 无论如何,经过一点工作,我终于安装并正确配置了驱动程序,我可以通过isql命令成功连接到SQL Server数据库: $ isql

我正在Red Hat Linux 6服务器上运行R2.15.2。我的目标是通过RODBC连接到另一台机器上的MS SQL Server数据库。我做了研究,从下载并安装了linux版本的MS SQL ODBC驱动程序。我必须从源代码处构建unixODBC 2.3.0版,因为它是windows驱动程序所必需的,并且还不在RHL repo中(repo版本是2.2.14)

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

$ isql -v test testuser testpass
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
所以我知道我已经正确设置了
odbc.ini
odbcinst.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
我一直在做一些研究,我认为解决方案(尽管我可能错了)可能与正确配置ODBC环境变量有关,以便RODBC知道在哪里可以找到
ODBC.ini
。根据我的研究,我发现了以下可能相关的环境变量:
$ODBCINI、$ODBCSYSINI、$ODBC\u ROOT$ODBC\u INCLUDE和$ODBC\u LIBS。
我对这些变量应该设置为什么有一个合理的想法,但我不确定如何永久设置它们,以便RODBC能够识别在哪里找到合适的文件

有人能帮我解释一下吗?我不确定自己是否正确理解了环境变量在linux中的工作方式,尤其是为什么
isql
在连接上没有问题,但是
RODBC
甚至找不到驱动程序/数据源


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

哇,我以为我是唯一一个处理这类东西的人。我必须解决同样的问题,发现最好的解决方案是使用rjdbc。这更容易配置,因为linux或osx上的ODBC非常不稳定。RJDBC的性能非常好,因为它使用本机ms sql server jar来执行查询。下面是我们其中一个脚本的一个示例。您只需要从microsoft下载sqljdbc4.jar,然后将.package(“RJDBC”)安装到您的环境中。我意识到您正在尝试让ODBC工作,我确实让它在osx上工作,但由于时间关系,我放弃了

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]")); 
库(RJDBC);

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


  • 编辑~/.bash_配置文件

    nano~/.bash\u配置文件

  • 添加此行

    导出ODBCINI=/usr/local/etc/odbc.ini 导出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)

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

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

我能够让JDBC连接正常工作,但我不想依赖JVM,我已经为RodbText编写了一个重要的数据库访问代码

最终起作用的只是:

remove.packages('RODBC')
install.packages('RODBC', type="source") 
如果您在mac上从源代码安装RODBC,它会正确地读取odbc.ini文件和odbcinst.ini文件

感谢这篇文章对解锁钥匙的微妙评论:

即使在windows中,我也发现odbcDriverConnect语句很挑剔,以至于我从未让它工作过。相反,我使用odbcConnect('odbc\u dsn\u entry',uid='username')。我知道ubuntu有一个odbc管理器,它看起来很像windows的管理器,但是它并没有提供更多的帮助,尤其是在红帽方面。此外,我在odbc管理器中将DB设置为用户和系统dsn方面也取得了更大的成功。非常感谢!!JDBC比ODBC简单得多它还不适用于我,但上面的一行也不适用(
isql-v testtestuser testpass
。我正在尝试与FileMaker连接:
ch@Bobby你应该试试RJDBC。你只需要下载并使用FileMaker JDBC驱动程序。
Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;
remove.packages('RODBC')
install.packages('RODBC', type="source")