我在 Red Hat Linux 6 服务器上运行 R 2.15.2。我的目标是通过 RODBC 连接到另一台机器上的 MS SQL Server 数据库。我做了研究,从微软支持网站下载并安装了 Linux 版本的 MS SQL ODBC 驱动程序。我必须从源代码构建 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
这是odbcDataSources
R中命令的结果:
> odbcDataSources()
named character(0)
我一直在做一些研究,我认为解决方案(尽管我可能错了)可能与正确配置 ODBC 环境变量有关,以便 RODBC 知道去哪里查找odbc.ini
。根据我的研究,我发现了以下可能相关的环境变量:$ODBCINI, $ODBCSYSINI, $ODBC_ROOT $ODBC_INCLUDE, and $ODBC_LIBS.
我对这些应该设置的内容有一个合理的想法,但我不确定如何永久设置它们,以便 RODBC 可以识别在哪里找到相应的文件。
任何人都可以为我阐明这一点吗?我不确定我是否正确理解环境变量在 linux 中的工作原理,尤其是为什么isql
连接没有问题,但RODBC
甚至找不到驱动程序/数据源。
注意:当我安装了 unixODBC 的 repo 版本时,使用 R 中的命令可以很好地安装 RODBC install.packages('RODBC')
。但是,在我从源代码安装 unixODBC 2.3.0 后,由于依赖关系问题,RODBC 安装会失败,我不得不使用此处发布的指南从源代码安装 RODBC 。有没有可能我一开始就没有正确配置 ODBC,这就是我现在遇到麻烦的原因?