2017-11-02 4 views
0

Nachdem ich FreeTDS und unixODBC installiert und konfiguriert habe und bestätige, dass sie korrekt funktionieren, versuche ich RODBC zu konfigurieren. Beim Versuch, die ODBC-Datenquellen in der R-Konsole anzuzeigen, erhalte ich jedoch die folgenden Ergebnisse.Wie installiere ich RODBC, so dass es unixODBC verwendet?

> odbcDataSources() 
named character(0) 

Wenn ich versuche, den FreeTDS-Treiber zu verwenden, erhalte ich folgende Ergebnisse.

>odbcDriverConnect("driver={FreeTDS};server=xx.xx.xx.xx;port=1433;database=XXXX_Analysis;trusted_connection=true;UID=********;PWD=********") : 
[RODBC] ERROR: state IM003, code 0, message [iODBC][Driver Manager]Specified driver could not be loaded 

Aufgrund des Fehlers sieht es so aus, als ob RODBC versucht, iODBC anstelle von unixODBC zu verwenden. Ich bin mir nicht sicher, wie ich RODBC für die Verwendung von unixODBC konfigurieren soll.

Antwort

0

Stellt sich heraus, die Standard-RODBC-Paket-Installation wird nicht mit UnixODBC funktionieren. Hier ist ein Prozess zum Neukompilieren und Installieren von RODBC.

  1. Entfernen Sie das aktuelle generische RODBC-Paket über die R-Konsole.

    >remove.packages("RODBC") 
    Removing package from ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library’ 
    (as ‘lib’ is unspecified) 
    
  2. Laden Sie die Quelle für RODBC herunter.

    https://cran.r-project.org/src/contrib/RODBC_1.3-15.tar.gz

  3. die Umgebungsvariable DYLD_LIBRARY_PATH für die Position, wo Ihre unixODBC Bibliothek befindet. Ich habe Homebrew verwendet, um unixODBC zu installieren, so dass sich meine Bibliothek in/usr/local/lib befindet.

    export DYLD_LIBRARY_PATH=/usr/local/lib

  4. Jetzt RODB neu installieren, damit es die neue Bibliothek Standort aufgreift.

    R CMD INSTALL /Users/xxxxxx/Downloads/RODBC_1.3-15.tar.gz

Es ist ziemlich viel ausgegeben, aber am Ende aussehen zu und Sie sollten etwas sehen.

clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o RODBC.so RODBC.o -lodbc -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation 
    installing to /Library/Frameworks/R.framework/Versions/3.4/Resources/library/RODBC/libs 
    ** R 
    ** inst 
    ** preparing package for lazy loading 
    ** help 
    *** installing help indices 
    ** building package indices 
    ** installing vignettes 
    ** testing if installed package can be loaded 
    * DONE (RODBC) 

Beachten Sie die -L/usr/local/lib, die angibt, dass der Bibliotheksstandort abgeholt wurde.

Jetzt sollten Sie in der Lage sein, Ihre ODBC-Verbindungen von unixODBC zur Verfügung gestellt zu sehen. Zurück in der neu gestarteten R-Konsole können Sie Folgendes eingeben, um zu überprüfen, ob RODBC unixODBC verwendet.

> library("RODBC") 
> odbcDataSources() 
     MYMSSQL1  MYMSSQL XXXXXXXXX_C_DB XXXXXXXX-SQL1 
    "FreeTDS"  "FreeTDS"  "FreeTDS"  "FreeTDS" 

Dank hiltmon für auf dem richtigen Weg mich zu helfen.