2017-09-16 75 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()