如何从R连接到.accdb数据库

3

如果你是R语言新手,可能会遇到连接Access数据库的问题。这是我运行的代码(在运行之前需要手动加载RODBC包):

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) : 第一个参数不是一个打开的 RODBC 通道。

你有什么解决方法吗?

环境:

  • 64位Windows
  • 32位MS Access 2013
  • 64位Microsoft R Open
3个回答

3
您使用的代码是正确的,但您的设置不正确。
您需要使用64位R和64位MS Access,或者32位R和32位MS Access。您可以尝试安装64位Access数据库引擎,在这里(2016版本)这里(2010版本)找到。
我曾经在安装完整版Access和数据库引擎方面有不同的结果(目前已安装Access 32位2016版本,并且无法安装Access数据库引擎64位2016版本,但可以通过在安装程序上使用/passive命令来安装2010版本)。
请参见此博客,了解如何在一台机器上安装32位完整版和64位数据库引擎的详细信息。但请注意,结果可能会有所不同。

请确认一下:您是说 Microsoft Access Database Engine 2016 Redistributable 的安装程序已经不再支持 /passive 开关,因此无法强制在同一台机器上同时安装 ACE 2016 的 64 位和 32 位版本了吗? - Gord Thompson
@GordThompson 我没有查找确切的信息,因为我在短时间内找不到它们。我只是想说,我尝试使用带有“/passive”开关的安装程序,并收到了一个错误消息,说我无法安装它,因为我已经运行了32位的Office,所以我选择了2010年的版本,因为据我所知,它们之间没有太多区别。 - Erik A
好的,谢谢。如果微软认为太多人使用“/passive”开关破坏了他们的Office安装,他们放弃它我也不会感到惊讶。我一直认为这是一个“坏主意(TM)”,否则为什么他们要编写安装程序以默认方式防止“/passive”行为呢? - Gord Thompson
感谢澄清。由于目前在我的设置上很难进行更改(公司政策),所以我将使用一个解决办法(将Access连接到Excel,将R连接到Excel),直到我的R技能足够好,可以尝试64位的Access数据库引擎方法。 - HerrSober

1
我对数据库导入不是很了解,但我会尝试通过告诉你我通常做什么来帮助你。 首先,您需要了解是否有 DSN 以访问数据库。您可以通过单击“开始”并转到“ODBC 数据源”来完成此操作。 当您在“用户 DSN”窗口中时,请检查是否有您的文件。如果没有,则只需添加它,方法是单击“添加”,然后查找读取您的文件的驱动程序,在您的情况下为 .accdb。 如果您没有驱动程序,您可以在此处下载:

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

创建数据源后,您需要进入R并编写以下几行代码。这里我将写一个例子。 我已经从以下网址下载了一个访问文件:

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

访问文件:Access初学者1

在R中,我已经输入:

library(RODBC)


odbcDS <- "PCResale Customer Database"

tmp <- odbcConnect(dsn = odbcDS)

df <- sqlFetch(tmp, "CustomerT") 

希望这有所帮助,

Ciao!


谢谢。我也尝试过这个方法,如果我的环境设置正确的话,可能会起作用。("...错误:状态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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接