RODBC::ODBCDriverConnection使用访问驱动程序失败,但没有文件名的相对路径

RODBC::ODBCDriverConnection使用访问驱动程序失败,但没有文件名的相对路径,r,rodbc,R,Rodbc,经过多次测试,我发现R包RODBC中有一个令人困惑的特性。使用函数RODBC::odbcDriverConnect,我无法连接到R的工作目录中的mdb文件。一位同事建议我在文件名中添加相对路径的/。这样,连接就起作用了。要测试这一点,您需要创建自己的MS Access mdb文件。我想这是MS司机的特点,而不是RODBC filename <- "test.mdb" filename.relative <- paste0("./", filename) driver.name &l

经过多次测试,我发现R包RODBC中有一个令人困惑的特性。使用函数
RODBC::odbcDriverConnect
,我无法连接到R的工作目录中的mdb文件。一位同事建议我在文件名中添加相对路径的
/
。这样,连接就起作用了。要测试这一点,您需要创建自己的MS Access mdb文件。我想这是MS司机的特点,而不是RODBC

filename <- "test.mdb"
filename.relative <- paste0("./", filename)

driver.name <- "Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
driver.name <- paste0(driver.name, "DBQ=", filename)
#fails:
con <- RODBC::odbcDriverConnect(driver.name)

filename我对此不太确定。当我深入研究
odbcDriverConnect
函数,并随后调用
C_RODBCDriverConnect
时,我在我的主路径中找到了对dll的引用。当您忽略相对路径时是否会收到错误消息?修改了我的帖子以包含错误消息。我可以使用Access ODBC驱动程序重现此症状,但它的行为与SQLite3 ODBC驱动程序不同(也就是说,不包括SQLite3驱动程序的路径仍然可以正常工作)。从这一点来看,它似乎是针对MS Access的。也许我应该修改发布标题,以包括“MS Access”?这有多大问题?除非我遗漏了什么,否则这比什么都麻烦,必须在数据库文件的开头加上
/
Warning messages:
1: In RODBC::odbcDriverConnect(driver.name) :
  [RODBC] ERROR: state HY000, code -1044, message [Microsoft]
[ODBC Microsoft Access Driver] Not a valid file name.
2: In RODBC::odbcDriverConnect(driver.name) : ODBC connection failed

#Second try:
driver.name <- "Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
driver.name <- paste0(driver.name, "DBQ=", filename.relative)

#works given it includes relative path:
con <- RODBC::odbcDriverConnect(driver.name)
RODBC::odbcCloseAll()