RODBC sqlSave导致R前端崩溃

4
我正在尝试使用RODBC包中的sqlSave向MSAccess数据库写入数据。我成功连接到数据库,可以读取表格,甚至可以使用sqlSave进行某些简单的更新操作。但是,在以下表格和更新操作时,R前端会崩溃。无论是在运行真实计算数据的Rscript还是在Rstudio中运行以下命令时都会发生这种情况。我正在以32位模式(与Access兼容)运行R 3.1版本。我已经创建了一个名为“ch”的通道,并打算向名为“data.mdb”的数据库中的“Test_Table”表格中写入数据。
test <- c(1,"Fixed","Upward","Gas", "2014-07-31",14,0.99)

test.df <- as.data.frame(t(test))

names(test.df) <- c("ID","Contract_Type","Direction", "Name_Of_Underlying","Data_Date","Months_To_Maturity","Absolute_Price_Move")

types <- c("integer","varchar","varchar","varchar","datetime","integer","double")
names(types) <- names(test.df)

sqlSave(ch, dat = test.df, tablename = "Test_Table",varTypes = types, append = T, verbose = T,safer = T)

我也尝试了 safer = F。

当我在RStudio中运行时,出现了“炸弹”符号,并要求我启动新会话。当我通过Rscript运行时,命令行输出指示所有正确的绑定正在发生,参数正确。然后弹出一个窗口,说Windows版R前端已停止工作,没有写入数据库的内容。

欢迎任何想法。


当我在Visual Studio中调试R脚本时,我会收到以下错误:在Rscript.exe中未处理的异常0x6C72A6E4(R.dll):0xC0000005:访问位置0x00000000时出现访问冲突。 - physicistintheory
稍微提供一些更多的信息,如果我删除日期时间字段,这个保存操作就可以正常工作。当我将日期时间字符串转换为POSIX时,它也会崩溃。 - physicistintheory
我使用INSERT INTO语句和sqlQuery使其工作了,但我仍然想知道如何使用sqlSave来完成这个技巧。 - physicistintheory
我遇到了同样的问题,它也会导致 R 控制台崩溃。 - David Waterworth
2个回答

12

当我试图使用sqlSave()将数据附加到MS SQL中的现有表时,我遇到了类似的问题。当我添加了参数rownames = FALSE到sqlSave中时,它开始工作。在RODBC软件包描述中,有以下内容:

rownames:如果逻辑为真,则将行名称保存为表中的第一列 rownames?

默认值为TRUE,因此我想RStudio崩溃是因为我在数据库表中没有行名称列。


1
这对我没有用,即使它起作用了,这也是一个R的错误吧? - David Waterworth

1
我在追加行时有几次遇到这种情况。在我的情况下,数据框中有额外的列似乎是问题所在。当我从数据框中删除不在表中的列时,它就可以正常工作了。

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