通过RODBC连接到SQL Server数据库

3
我的问题与在Ubuntu中使用RODBC连接ODBC服务器本地安装RODBC时如何指定包含和库目录有关,但我没有找到适合我的情况的答案。我想使用RODBC连接远程服务器上的SQL Server数据库。我已经安装了unixodbc和freetds,并且可以通过T-SQL在终端连接,所以连接是存在的。但是,当我尝试使用以下命令在R中连接时(所有敏感信息均已替换为***):
odbcConnect(dsn="TESTSQL", uid=***, pwd=***)

我得到:

Warning messages:
1: In RODBC::odbcDriverConnect("DSN=TESTSQL;UID=***;PWD=***") : [RODBC] ERROR: state 01000, code 0, message [unixODBC][Driver Manager]Can't open         lib '/usr/local/Cellar/freetds/0.95.18/lib/libtdsodbc.so' : file not found
2: In RODBC::odbcDriverConnect("DSN=TESTSQL;UID=***;PWD=***") :
  ODBC connection failed

odbc.ini文件如下:

[ODBC Data Sources]
TESTSQL     = Test database

[TESTSQL]
Driver      = MSSQL
Servername  = ***.**.**.**
Port        = **
Database    = ****
TDS_Version = 8.0

我已安装最新版本的freetds,即1.00.27,因此我很惊讶地发现这个库libtdsodbc.so缺失了。
这是正常的吗?您是否建议安装版本0.95.18,还是保留1.00.27并寻找缺失的库?

如果您已经安装了该库,那么您在哪里可以找到 libtdsodbc.so?根据错误信息,我的猜测是它不在 /usr/local/Cellar/... 下。(如果您不知道如何找到它,请尝试使用 local libtdsodbc.so 或者如果失败了,则使用 grep libtdsodbc.so /var/lib/dpkg/info/*list 或者如果非常绝望则使用 find / -type f -iname libtdsodbc.so。) - r2evans
可能希望从错误信息中隐藏您的用户名和密码。 - Ian Wesley
我曾经用grep和find查找libtdosbc.so,但没有成功: grep libtdsodbc.so /var/lib/dpkg/info/*list grep: /var/lib/dpkg/info/*list: 没有那个文件或目录 我使用brew install --with-tdsver=8.0 --with-msdblib --with-unixodbc=/usr/local/Cellar/unixodbc/2.3.4/ freetds进行了安装。 - Xavier Prudent
1个回答

1
我不得不移除freetds:
brew remove freetds

然后重新安装它,指定 --with-unixodbc 以创建 libtsdodbc.so:

brew install freetds --with-unixodbc

在odbc.ini文件中,我需要注意不要混淆“Server”和“Servername”,并将驱动程序链接到libtdsodbc.so,以便我的odbc.ini看起来像这样:
[ODBC Data Sources]
TESTSQL     = Test database

[TESTSQL]
Driver      = /usr/local/lib/libtdsodbc.so
Server      = ***.**.**.**
Port        = **
Database    = ****
TDS_Version = 8.0

并使用RODBC软件包连接

ch1 <- odbcConnect(dsn="TESTSQL", uid=***, pwd=***)
> ch1
RODBC Connection 5
Details:
  case=nochange
  DSN=TESTSQL
  UID=****
  PWD=******

它有效!

此页面提供进一步详细信息

http://eriqande.github.io/2014/12/19/setting-up-rodbc.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接