webentwicklung-frage-antwort-db.com.de

R: [unixODBC] [Treibermanager] Lib 'SQL Server' kann nicht geöffnet werden: Datei nicht gefunden

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

Das ist mein Code. Ich bekomme den Folgefehler in R

[unixODBC] [Treibermanager] Lib 'SQL Server' kann nicht geöffnet werden: Datei nicht gefunden

[unixODBC] [Driver Manager] Verbindung ist nicht vorhanden ODBC Fehler in SQLDisconnect Datenquelle konnte nicht geöffnet werden. Fehler in doTryCatch (return (expr), name, parentenv Handler): Datenquelle konnte nicht geöffnet werden.

Ich habe den MSSQL- und den unixODBC-Treiber auf meinem Linux-Computer installiert, und er wird auch in der Datei /etc/odbc.ini erneut ausgewählt

Kann mir bitte jemand dabei helfen?

5
Sonal

Ich habe den gleichen Fehler erhalten, als ich den Code für die Verbindung zu MSSQLSERVER unterbrachte

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

Es wirft mir zu 

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

Warum wurde dieser Fehler geworfen? Antwort: Wenn der richtige Wert für den Versionsnamen ODBC nicht auf den Treiberwert gesetzt wird.

Woher bekommen wir Treiber ODBC Versionsname

im Ordner "/ etc" finden Sie die Datei "odbcinst.ini", öffnen Sie sie und überprüfen Sie den Versionsnamen

[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

also habe ich ODBC Treibername von hier, es wird "ODBC-Treiber 17 für SQL Server" Dann modifiziere ich meine Verbindungszeichenfolge 

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

Und es funktioniert gut 

3

In meinem Fall hat die Antwort von Zaynul leider nicht funktioniert. Aber es half mir, einen anderen Weg zu finden. Ich verwende sqlalchemy und konnte erfolgreich eine Verbindung über den Treiberpfad herstellen:

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: Ich war mit dieser Lösung nicht zufrieden, da sich der Dateiname des Treibers ändern konnte. Daher gelang es mir, die Bibliothek zu ändern, mit der do pymssql verbunden wird.

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

und es hat auch gut funktioniert. =]

EDIT 2: Eine andere Erkennung, die eine Verbindung zu einer benannten Instanz herstellt, zum Beispiel für Benutzer, die SQL Express verwenden.

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