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()创建表,警告:在列中截断为255个字节?