web-dev-qa-db-fra.com

R: [unixODBC] [Gestionnaire de pilotes] Impossible d'ouvrir lib 'SQL Server': fichier non trouvé

setwd("/mnt/mountpoint/abc/")
sqlServerConnString <- "SERVER=server;DATABASE=sqldwdb;UID=xyz;PWD=abc;"
sqlServerDataDS <- RxSqlServerData(sqlQuery = "SELECT * FROM xyz",
                               connectionString = sqlServerConnString)
sqlServerDataDF <- rxImport(sqlServerDataDS)

Ceci est mon code. Je reçois l'erreur suivante dans R

[unixODBC] [Gestionnaire de pilotes] Impossible d'ouvrir lib 'SQL Server': fichier introuvable

[unixODBC] [Gestionnaire de pilotes] La connexion n'existe pas ODBC Erreur dans SQLDisconnect Impossible d'ouvrir la source de données.Error dans gestionnaire): Impossible d’ouvrir la source de données .

J'ai installé les pilotes MSSQL et unixODBC sur ma machine Linux et il est également sélectionné dans le fichier /etc/odbc.ini

Est ce que quelqu'un peut m'aider s'il vous plait?

5
Sonal

J'ai la même erreur quand je mets ci-dessous le code pour la connexion à MSSQLSERVER

library(RODBC)
dbconnection <- odbcDriverConnect("Driver=SQL Server;Server=192.168.76.60; Database=kaggle;Uid=sa; Pwd=1234")

Ça me jette 

[unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found

pourquoi cette erreur a jeté? Réponse: lorsque nous ne parvenons pas à mettre le bon nom de version ODBC sur la valeur du pilote.

D'où nous pouvons obtenir le pilote ODBC nom de version

dans le dossier "/ etc", vous trouverez le fichier "odbcinst.ini", ouvrez-le et vérifiez le nom de la version

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/Microsoft/msodbcsql17/lib64/libmsodbcsql-17.1.so.0.1
UsageCount=1

donc j’ai eu ODBC nom du pilote à partir de là, ce sera "Pilote ODBC 17 pour SQL Server" Puis je modifie ma chaîne de connexion 

library(RODBC)
dbconnection <- odbcDriverConnect("Driver=ODBC Driver 17 for SQL Server;Server=192.168.76.60; Database=kaggle;Uid=sa; Pwd=1234")

Et ça marche bien 

3
Zaynul Abadin Tuhin

Dans mon cas, la réponse de Zaynul n'a pas fonctionné, malheureusement. Mais cela m'a aidé à trouver un autre moyen. J'utilise sqlalchemy et je pourrais créer avec succès une connexion en passant par le chemin du pilote:

engine = create_engine('mssql+pyodbc://sa:******@localhost:1433/dbCVServer?driver=/opt/Microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1', echo=True)

engine.execute('select 1')

EDIT: Je n'étais pas satisfait de cette solution, car le nom du fichier du pilote pouvait changer, j'ai donc réussi à changer la bibliothèque utilisée pour connecter do pymssql.

engine = create_engine('mssql+pymssql://sa:******@localhost:1433/dbCVServer')

et cela a bien fonctionné aussi. =]

EDIT 2: Une autre découverte, la connexion à une instance nommée, pour ceux qui utilisent SQL Express, par exemple.

engine = create_engine('mssql+pymssql://mssql+pymssql://localhost\SQLEXPRESS/dbCVServer')

0