2014-06-05 16 views
10

Ho impostato il mio driver ODBC in modo che MS Excel possa importare i dati in un foglio di calcolo bene.ODBC funziona bene in MS Excel, ma non in R

Tuttavia, quando provo a stabilire la connessione con la R, utilizzando

ch <- odbcConnect(leprosyDHISdb, uid = leprosyDHISid, pwd = leprosyDHISpw) 

allora ottengo l'errore

Warning messages: 
1: In odbcDriverConnect("DSN=dhis2;UID=dhis2_viewer;PWD=*********") : 
    [RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
2: In odbcDriverConnect("DSN=dhis2;UID=dhis2_viewer;PWD=*********") : 
    ODBC connection failed 

Che cosa potrebbe fare ODBC falliscono per R, ma non per Excel?

risposta

1

Non sono sicuro se questo è il modo più corretto per farlo, ma questo ha funzionato per me.

  1. Vai al foglio di calcolo in Excel con i dati importati.
  2. Fare clic su Dati -> Connessioni
  3. doppio clic sulla query
  4. Fare clic sulla scheda Definizione
  5. Copiare la stringa di connessione e incollarlo nella R all'interno della funzione odbcDriverConnect:

    MyConn < - odbcDriverConnect ("DRIVER = SQL Server; SERVER = fooServer; UID = foo_viewer; PWD = 1pityDfoo!; APP = Microsoft Office 2010; WSID = foocomputername; database = DTS ")

  6. È anche possibile copiare il testo di comando e incollarlo nella R all'interno della funzione sqlQuery:

    mydata < - sqlquery (MyConn," SELECT DTS.dts_id, DTS.dts_no, DTS.unit_code, DTS.originator, DTS.doc_type_id, DTS.doc_date, DTS.subject, DTS.remarks, DTS.status, DTS.is_confidential, DTS.created_by, DTS.date_created, DTS .updated_by, DTS.date_updated, DTS.timestamp DA DTS.dbo.DTS DTS ")

6

Verificare se si utilizza una versione a 32/64 bit di R, verificare anche se la connessione ODBC è 32/64 bit.

Per impostare un DSN a 32 bit utilizzando Windows passare alla cartella seguente C: \ Windows \ SysWOW64

Per impostare un DSN a 64 bit utilizzando Windows passare alla cartella seguente C: \ Windows \ System32

EDIT: Il seguente blog è una guida eccellente che potrebbe risultare utile

http://sandymuspratt.blogspot.co.uk/2013/01/getting-access-data-into-r.html

1

Provare a utilizzare odbcDri verConnect e una stringa di connessione.

ch <- odbcDriverConnect("Driver={Oracle in OraClient11g_home1};Dbq=leprosyDHISdb;Uid=leprosyDHISid;Pwd=leprosyDHISpw;") 

Potrebbe essere necessario controllare la https://www.connectionstrings.com/ per la stringa di connessione specifica. This is the one I used.

+0

Grazie, @Phil. Sfortunatamente, questo non sembra funzionare. – Tom

+0

Una volta ottenuto il driver giusto, ha funzionato. Grazie @Phil! – Tom

2

Ho avuto lo stesso problema di recente. Ecco come ho risolto:

1) Vai a pagina: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html e selezionare il sistema operativo e la versione rilevanti.

2) Scaricare il pacchetto utilizzando il link sotto "Instant Client Package - ODBC: librerie aggiuntive per consentire alle applicazioni ODBC"

3) Estrarre i file in unità C come C: \ instantclient_12_1 ed eseguire odbc_install.exe in esso.

4) Riprovare.

2

Questo work-around mi ha aiutato:

  1. Vai a ODB Data Source Administrator ([Win] + ODBC ...)
  2. Aggiungi nuovo DNS (non importa di che tipo, mantenendo DNS dell'utente); puntare la sorgente al DB desiderato e denominare il nuovo DNS (es. dbAdHocForR)
  3. Tornare a R per definire il canale (basta chiamare il DNS senza ulteriori parametri): ch < - odbcConnect ("SQL Server")
  4. Definire la query SQL utilizzando il canale: q1 < - sqlquery (ch "selezionare in alto 1000 * da dbo.RTestTable")
Problemi correlati