2017-09-16 72 views
3

R是新手,並且有連接到Access數據庫的麻煩。這是代碼我運行(RODBC包運行前手動加載):如何從R連接到.accdb數據庫

library(RDOBC) 

conn <- odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='C:/db/dbNorthwind.accdb'") 
subset(sqlTables(conn), TABLE_TYPE == "TABLE") 
df <- sqlFetch(conn, "tblCustomer") 
df # 

我得到的錯誤消息:

Error in sqlTables(conn) : first argument is not an open RODBC channel.

知道如何解決任何提示?

環境:

  • 64位Windows
  • 32位的MS Access 2013
  • 64位Microsoft R打開

回答

3

您正在使用的代碼是正確的,你的安裝程序不是。

您需要使用64位R和64位MS Access或32位R和32位MS Access。但是,您可以嘗試安裝64位Access數據庫引擎,找到here (2016 version)here (2010 version)。 (當前獲得Access 32位2016,並且無法安裝Access數據庫引擎64位2016,但可以通過安裝2010版本來安裝2010版本在安裝程序中使用/ passive命令)。

有關如何在一臺機器上安裝32位完整版本和64位數據庫引擎的詳細信息,請參見this blog。但如前所述,結果可能會有所不同。

+0

只是爲了確認:你是說安裝了[Microsoft Access數據庫引擎2016可再發行組件(https://www.microsoft.com/en-us/download/details.aspx?id=54920 )已經放棄了對'/ passive'開關的支持,並且已經不再可能將2016版ACE的64位和32位版本強制到同一臺機器上了? –

+0

@GordThompson我沒有查找這些問題,因爲我無法在短時間內找到它們。我只是說我試圖用'/ passive'開關來使用安裝程序,並得到一條錯誤消息,說我無法安裝它,因爲我已經有32位的Office正在運行,所以我只是選擇了2010版本,因爲據我所知,沒有太多差異 –

+0

好的,謝謝。如果微軟決定有太多的人使用'/ passive'開關打破他們的Office安裝,並且他們放棄了它,我不會感到驚訝。我一直認爲它是一個「壞主意(TM)」,否則他們爲什麼會打擾編碼安裝程序以防止默認情況下的'/ passive'行爲? –

1

我對數據庫導入瞭解不多,但我會盡力告訴你我通常會做什麼來幫助你。 您需要做的第一件事是瞭解您是否擁有DSN以訪問數據庫。您可以通過單擊開始並轉到ODBC數據源來完成此操作。 當你在「UserDSN」窗口中時,你檢查是否有你的文件。如果它不在那裏,你只需要添加它,通過點擊「添加」,然後你尋找驅動程序來讀你的文件在你的情況是.accdb。 如果您沒有驅動程序,您可以在這裏下載:

http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=e

在創建了DSN後,那麼你進入R和你寫的代碼,這幾行。在這裏我會寫一個例子。

https://www.599cd.com/access/studentdatabases/

訪問文件:訪問初學者1

中RI鍵入: 我從下載的訪問文件

library(RODBC) 


odbcDS <- "PCResale Customer Database" 

tmp <- odbcConnect(dsn = odbcDS) 

df <- sqlFetch(tmp, "CustomerT") 

希望這是任何幫助,

Ciao!

+0

謝謝。嘗試了這一點,如果我的環境設置正確,可能會奏效。 (「...錯誤:狀態IM014,代碼0,消息[Microsoft] [ODBC驅動程序管理器]指定的DSN包含驅動程序和應用程序之間的體系結構不匹配...」) – HerrSober

0

這對我來說很好。

library(RODBC) 

# for 32 bit windows 
# Connect to Access db 
# channel <- odbcConnectAccess("C:/Users/Excel/Desktop/Coding/Microsoft Access/Northwind.mdb") 

# Get data 
# data <- sqlQuery(channel , paste ("select * from Name_of_table_in_my_database")) 


# for 64 bit windows 
channel <- odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/Excel/Desktop/Coding/Microsoft Access/Northwind.mdb") 

data <- sqlQuery(channel , paste ("select * from CUSTOMERS")) 

odbcCloseAll()