come ci si connette al server mssql utilizzando RODBC?
Domanda
Avevo un database Oracle e ho utilizzato la connessione RODBC per connettermi a Oracle come di seguito:
library(RODBC)
new_sql<-c("select * from table")
tryCatch({
ch=odbcConnect("odbc_con",pwd = "!passwd!")
res<-sqlQuery(ch,new_sql)
},error = function(e) {
print(odbcGetErrMsg(ch))
})
Il database è stato migrato su mssql e ho creato una nuova connessione odbc al server mssql, chiamata new_odbc_con utilizzando DATA SOURCES (ODBC), utilizzando gli strumenti di amministratore.
Quando ho aggiornato il codice a questo:
tryCatch({
ch=odbcConnect("odbc_con",pwd = "!password!")
res<-sqlQuery(ch,new_sql)
},error = function(e) {
print(odbcGetErrMsg(ch))
})
Non riesco a connettermi al server SQL ed eseguire SQL.Che cosa sto facendo di sbagliato?
Soluzione
Nel caso in cui si ripresenti, questo è ciò che ho fatto per risolvere questo problema.
- Ho creato un sistema
odbc
connessione utilizzando gli strumenti di amministrazione (origini dati (ODBC)) - Ho aggiornato questa riga a
ch=odbcConnect("odbc_con",pwd = "!password!")
Ach=odbcConnect("odbc_con",uid="userid",pwd = "!password!")
ha funzionato a meraviglia.
Altri suggerimenti
Fornisce anche la soluzione Linux RedHat, quella necessità di modificare 3 di questi file di configurazione qui sotto prima di chiamare il DSN in R
$ sudo nano /etc/odbc.ini
[salesdb]
Driver=FreeTDS
Trace=No
Server=xxx
Port=1433
Database=xxxx
TDS_Version=8.0
$ sudo nano /etc/freetds.conf
# A typical Microsoft server
[salesdb]
host = xxxx
port = 1433
tds version = 8.0
client charset = UTF-8
$ sudo nano /etc/odbcinst.ini
# Driver from the FreeTDS package
# Setup from the unixODBC package
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib64/libtdsodbc.so # this is the linux path, you can call odbcinst -q -d to see where the other drivers were installed in the system
.
Infine, è possibile utilizzare TSQL o ISQL per testare la sessione è installato correttamente o questo comando qui sotto,
$ odbcinst -q -s
.