RODBC sqlSave 崩溃 R 前端

Posted

技术标签:

【中文标题】RODBC sqlSave 崩溃 R 前端【英文标题】:RODBC sqlSave crashes R front end 【发布时间】:2015-02-12 19:29:47 【问题描述】:

我正在尝试使用 RODBC 包中的 sqlSave 写入 msaccess 数据库。我打开与数据库的连接没有问题。我可以从表格中阅读。我什至可以使用 sqlSave 进行某些简单的更新,但是对于下表和以下更新,R 前端会崩溃。当我从带有真实计算数据的 Rscript 运行它时,以及在我运行以下命令时从 Rstudio 运行它时,都会发生这种情况。我在 32 位模式下运行 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)

我也尝试过使用更安全的 = F。

当我在 RStudio 中运行它时,我得到了“炸弹”标志,并被要求开始一个新会话。当我通过 Rscript 运行时,命令行输出表明正在发生所有正确的绑定并且参数是正确的。然后会弹出一个窗口,提示 R for Windows 前端已停止工作,并且没有向数据库写入任何内容。

欢迎任何想法。

【问题讨论】:

当我在 Visual Studio 中调试 Rscript 时,我收到以下错误:Rscript.exe 中 0x6C72A6E4 (R.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。 只是更多信息,如果我删除日期时间字段,此保存工作。当我将日期时间字符串转换为 POSIX 时,它也会崩溃。 我使用 INSERT INTO 语句和 sqlQuery 让它工作,但我仍然很想知道如何让 sqlSave 做到这一点。 我遇到了同样的问题,它也使 R 控制台崩溃 【参考方案1】:

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

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

默认值为 TRUE,所以我猜 RStudio 崩溃了,因为我在数据库中的表中没有行名列。

【讨论】:

这对我不起作用,即使它确实是一个 R 错误?【参考方案2】:

我在添加行时已经发生过几次这种情况。在我的情况下,数据框中有额外的列似乎是问题所在。当我从数据框中删除不在表中的列时,它起作用了。

【讨论】:

以上是关于RODBC sqlSave 崩溃 R 前端的主要内容,如果未能解决你的问题,请参考以下文章

来自 RODBC 的 sqlSave 仅在 R 中保存日期的年份

RODBC sqlSave() 和映射列名

RODBC sqlSave 列类型:如何确定?

RODBC :: sqlSave()创建表,警告:在列中截断为255个字节?

与 Oracle 数据库的 RODBC 连接不起作用,崩溃 R

RODBC::sqlSave() 创建表,警告:在列中截断为 255 个字节?