R 中的 ODBC 连接字符串和/或 DSN

Posted

技术标签:

【中文标题】R 中的 ODBC 连接字符串和/或 DSN【英文标题】:ODBC connection string and/or DSN in R 【发布时间】:2020-03-11 21:33:54 【问题描述】:

我正在尝试使用 RStudio(32 位)中的“RODBC”包连接并读取数百个 MS Access 数据库文件。以前的程序用于打开和读取这些文件,并使用 system.mdw 系统数据库文件来指定用户权限,但我在 RODBC 文档中找不到任何描述如何在连接字符串中包含此文件的内容。这是我尝试过的,已经成功连接到数据库,但无法读取任何内容:

files <- dir("file directory to access files", recursive=TRUE, full.names=TRUE, pattern="\\.mdb$")              

#2007 version is able to connect but can't read
dta <- odbcConnectAccess2007(files[1])
tables = sqlTables(dta)# can read all the table names in each file

  habData = sqlFetch(dta, "Streams") #can't read the table content, see error message below

> habData
[1] "42000 -1907 [Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission on 'Streams'."
[2] "[RODBC] ERROR: Could not SQLExecDirect 'SELECT * FROM \"Streams\"'" 

#Older version is able to connect and still can't read
conn <- odbcConnect(paste("MS Access Database;DBQ=",files[4],sep = ""), uid = "Engine")
df <- sqlFetch(conn, "Streams") #can't read the table content, see error message below

我有 system.mdw 文件,但不知道如何将它与 Access 数据库相关联。有人在 R 中做过这个吗?也许用不同的包?

【问题讨论】:

请注意您的标签:access 明确表示“不要将此标签用于 Microsoft Access,请改用 ms-access” 【参考方案1】:

我剖析了使用 Windows ODBC 控制面板 DSN 建立的连接字符串,并用它来重建一个包含 system.mdw 文件、用户 ID 和密码的新连接字符串。现在我可以循环遍历所有文件目录并读出数据!

【讨论】:

【参考方案2】:

我没有在 R 中做过,但是 ODBCconnect 的 R 文档说第一个参数是“DSN”(数据源名称)。我建议您从 Windows 控制面板中的“ODBC”图标开始,而不是像在“旧版本”中那样使用参数化连接字符串。这将为您提供一个向导,帮助您填写所有需要的详细信息。该向导会将信息保存在注册表或文件中,您只需在 R 中为 ODBCconnect 提供它创建的 DSN 的名称或完整位置。

我不建议使用 ODBCconnect2007 - 它看起来像一个简化的界面,没有您需要的所有选项。

【讨论】:

但是我需要通过向导为每个单独的访问文件创建该连接吗?我在不同的文件夹中有 200 多个文件需要连接和读取,因此我尝试在 R 中开发一个脚本来执行此操作。 我能够创建 DSN 并通过 RODBC 连接到单个 .mdb 文件,这很棒,但不清楚如何在不创建另一个文件的情况下将 DBQ 更改为不同的文件路径DSN。如果是这种情况,那么我将回到按文件执行此文件的方式之一。

以上是关于R 中的 ODBC 连接字符串和/或 DSN的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 Access 更改无 DSN 的 ODBC 连接的用户名和密码?

QODBC连接字符串

delphi连接mysql不用添加DSN(mysql connector odbc 5.1版)

用odbc和php pdo连接impala,字符串字段为空

手动关闭 ODBC DSN 连接

R基础学习-- 连接sqlserver