我正在尝试使用 RODBC 包中的 sqlSave 写入 msaccess 数据库。我打开与数据库的连接没有问题。我能够从表中读取。我什至可以使用 sqlSave 进行某些简单的更新,但是对于下表和以下更新,R 前端崩溃了。当我运行以下命令时,从带有实际计算数据的 Rscript 和 Rstudio 运行它时都会发生这种情况。我在 32 位模式下运行 R 3.1(为了与 Access 兼容)。
我创建了一个 channel “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 中运行它时,我得到了“炸弹”标志,并被要求开始一个新的 session 。当我通过 Rscript 运行时,命令行输出表明所有正确的绑定(bind)都在发生并且参数是正确的。然后弹出一个窗口,说 R for Windows 前端已停止工作,并且没有任何内容写入数据库。
欢迎任何想法。
最佳答案
当我尝试使用 sqlSave() 将数据附加到 MS SQL 中的现有表时,我遇到了类似的问题。当我将参数 rownames=FALSE 添加到 sqlSave 时,它已经开始工作。在 RODBC 包描述中有:
rownames:如果符合逻辑,将行名保存为表中的第一列行名?
默认值是 TRUE,所以我猜 RStudio 崩溃了,因为我在数据库表中没有行名列。
关于RODBC sqlSave 使 R 前端崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28486150/