我的问题是关于
Trying to connect to an ODBC server using RODBC in ubuntu
和
How to specify include and lib directories when locally installing 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 并寻找丢失的库?
最佳答案
我必须删除 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=******
它有效!
此页面的更多详细信息
关于sql-server - 通过 RODBC 连接到 SQL Server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506411/