使用RODBC遇到的一些坑QAQ

使用RODBC遇到的一些坑QAQ

來自專欄數據分析與R語言

我們在使用R連接外部數據源時,如連接Excel、MySQL、Oracle時,需要使用RODBC包來連接。

但在使用過程中,會遇到各種各樣的問題,下面介紹下遇到的問題以及相應的解決方案。

所用系統是Windows8, 64位操作系統。

一、使用RODBC連接Oracle(MySQL類似)

與前一篇文章使用RODBC連接Excel是類似的。首先載入包,再建立連接。

install.packages("RODBC") # 首先安裝此包library(RODBC) #載入包con <- odbcConnect("Oracle", uid = "test1", pwd = "test1") #shiche1是連接的數據源名稱,後面分別是賬號密碼

運行到上面時,報錯:

Warning messages:

1: In RODBC::odbcDriverConnect("DSN=oracle;UID=xjshiche11;PWD=xjshiche11") :

[RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC 驅動程序管理器] 未發現數據源名稱並且未指定默認驅動程序

2: In RODBC::odbcDriverConnect("DSN=oracle;UID=xjshiche11;PWD=xjshiche11") :

ODBC connection failed

提示錯誤【未發現數據源名稱且未指定默認驅動程序】,一個出錯的原因是沒有相應的驅動程序,另一個是由於數據源名稱不正確。

此時,我們需要設置ODBC數據源,來作為我們連接的數據源。

步驟:依次打開【控制面板】==》【管理工具】==》【ODBC數據源】==》【雙擊ODBC數據源】==》添加所需驅動

需要確定安裝的Oracle是32位還是64位的。我這邊安裝的是32位的。

windows的判斷,32位系統肯定是32位的,64位系統看任務管理器,sqlplus後面沒有*32就是64位的。

截圖中我以64位的來說明,因為我的32位的已經配置好了,這之前沒有截圖23333。

我們發現這幾個驅動程序不存在,提示只能刪除,並且我們點擊【添加】時,只有SQL存在。

那麼,下一個問題就是,將Oracle添加到驅動程序中

解決方法:打開【C:WindowsSysWOW64】==》雙擊【odbcad32.exe】==》選擇所需驅動【oracle in oraDb10g_home1】

上述方法是64位系統下面的操作。

載入完成之後,再到控制面板中設置ODBC數據源時,會發現已經有相應的驅動程序了。

下面就設置所連接的Oracle數據源信息即可。

設置數據源時,需要將數據源的名稱以及用戶名設置好,在R連接時,使用這裡的名稱。

con<-odbcConnect("Oracle",uid = "test",pwd = "test")

上面即可連接成功。

二、使用RODBC連接Excel

使用RODBC連接Excel時,會有兩種方式,一種是64位連接,一種是32位連接。

con <- odbcConnectExcel("E:/歷史數據3617H015773.xls") #32位連接方式con <- odbcConnectExcel2007("E:/歷史數據3617H015773.xlsx") #64位連接方式

兩者區別:①函數一個帶2007一個不帶;②帶有2007的Excel文檔是.xlsx的格式。其他相同。

如果上面函數使用錯誤,則會出現提示:

Warning messages:

1: In odbcDriverConnect(con, tabQuote = c("[", "]"), ...) :

[RODBC] ERROR: state HY000, code -5015, message [Microsoft][ODBC Excel 驅動程序] 外部表不是預期的格式。

2: In odbcDriverConnect(con, tabQuote = c("[", "]"), ...) :

ODBC connection failed

我的Excel文檔是.xlsx格式,但是驅動程序中沒有這個格式。

如果在【用戶DSN】中沒有可以使用的Excel文檔,需要按照上面類似的步驟【添加】驅動。

所以將上面格式的文檔另存為.xls格式,使用odbcConnectExcel來載入Excel數據。

con <- odbcConnectExcel("E:/歷史數據3617H015773.xls")

這個方式可以成功載入數據源。

推薦閱讀:

歷史課堂(二):論明朝與同時期世界先進國家的軍事科技對比
有哪些改變世界的發明?
這個世界上真的有天使嗎?
三千元就能買到旗艦手機?小米MIX 2S了解一下

TAG:科技 | 數據分析 | R編程語言 |