使用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了解一下