提问人:SuavestArt 提问时间:8/30/2023 最后编辑:Gord ThompsonSuavestArt 更新时间:8/31/2023 访问量:50
将数据帧写入 R 中的现有 Access (.accdb) 表
Write a data frame to an existing Access (.accdb) table in R
问:
我花了一些时间使用该库将数据帧写入 Access 表,但在意识到它禁止列名中的空格后放弃了它。RDBOC
现在我正在尝试这个库,我在网上找到的参考资料较少。dboc
通过编写以下命令创建与数据库的连接:
con <- dbConnect(odbc(), .connection_string = paste("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=", my_db_path, sep = ""))
之后,我尝试了两种将数据框写入表的替代方法:
dbWriteTable(con, "existing_table", my_df, append = TRUE)
dbWriteTable(con, "existing_table", my_df, overwrite = TRUE)
两者都返回了以下错误。数据框中的列名与表中的列名匹配。
Error: nanodbc/nanodbc.cpp:1763: HYC00: [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented
有关如何调试此错误的任何指导?
答:
2赞
Erik A
8/31/2023
#1
DBI
默认情况下,带有批处理插入。Access 不支持批量插入。这是未实现的可选功能。odbc
要执行正常插入,请指定:batch_rows = 1
dbWriteTable(con, "existing_table", my_df, append = TRUE, batch_rows = 1)
在 GitHub 上也进行了讨论。
关于调试,正如 Gord Thompson 所指出的,ODBC 跟踪通常是一个不错的选择,但这是一个已知问题。
评论
0赞
SuavestArt
8/31/2023
它有效,谢谢,但它太慢了。我什至尝试在桌面上而不是在网络上写入 Access 文件,但这并没有提高速度。有什么猜测吗?
1赞
Erik A
8/31/2023
井。。。访问速度不是那么快。细节实际上取决于您要插入的内容。最好先将数据写入 Excel,然后再将数据从 Excel 导入 Access。查看 stackoverflow.com/a/70977554/7296893
评论
SQL_BIGINT