【发布时间】:2012-11-29 00:50:07
【问题描述】:
我在 Red Hat Linux 6 服务器上运行 R 2.15.2。我的目标是通过 RODBC 连接到另一台机器上的 MS SQL Server 数据库。我做了研究,从the microsoft support website 下载并安装了 MS SQL ODBC 驱动程序的 linux 版本。我必须从源代码构建 unixODBC 版本 2.3.0,因为它是 Windows 驱动程序所必需的,并且尚未在 RHL 存储库中(存储库版本是 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
这是 R 中 odbcDataSources 命令的结果:
> odbcDataSources()
named character(0)
我一直在做一些研究,我认为解决方案(尽管我可能错了)可能与正确配置 ODBC 环境变量有关,以便 RODBC 知道去哪里找到odbc.ini。根据我的研究,我发现了以下可能相关的环境变量:$ODBCINI, $ODBCSYSINI, $ODBC_ROOT $ODBC_INCLUDE, and $ODBC_LIBS.我对这些应该设置的内容有一个合理的想法,但我不确定如何永久设置它们,以便 RODBC 可以识别在哪里可以找到合适的文件。
谁能帮我解释一下?我不确定我是否正确理解环境变量在 linux 中的工作原理,尤其是为什么 isql 连接没有问题,但 RODBC 甚至找不到驱动程序/数据源。
注意:当我安装了 unixODBC 的 repo 版本时,RODBC 可以使用 R 中的 install.packages('RODBC') 命令安装得很好。但是,在我从源代码安装 unixODBC 2.3.0 后,RODBC 安装会因为依赖关系而失败问题,我必须使用guide posted here 从源代码安装 RODBC。是否有可能我一开始就没有正确配置 ODBC,这就是我现在遇到问题的原因?
【问题讨论】:
-
即使在 Windows 中,我也发现 odbcDriverConnect 语句很挑剔,以至于我从来没有让它工作。相反,我使用 odbcConnect('odbc_dsn_entry', uid='username')。我知道 ubuntu 有一个 odbc 管理器,它看起来很像一个 windows 的管理器,但并没有做太多的工作来提供更多帮助,尤其是在 red hat 中。此外,我在 odbc 管理器中将数据库设置为用户和系统 dsn 方面取得了更大的成功。