2011-11-15 38 views
2

我与sqlSave战斗到我的矩阵B看起来像这样的补充:误差sqlSave

Noinscr 
88877799 
45645687 
23523521 
45454545 

到SQL表。

所以我运行下面的命令:

sqlSave(channel, b, "[testsFelix].[dbo].[TREB]", append = TRUE, 
    rownames = FALSE, colnames = FALSE, safer = TRUE, fast = FALSE) 

,我得到以下错误:

Erreur dans sqlSave(channel, b, "[testsFelix].[dbo].[TREB]", append = TRUE, : 
    42S01 2714 [Microsoft][SQL Server Native Client 10.0][SQL Server] 
    There is already an object named 'TREB' in the database. 
    [RODBC] ERROR: Could not SQLExecDirect 
    'CREATE TABLE [testsFelix].[dbo].[TREB] ("Noinscr" int)' 

看到,它没有要删除的表,即使append=TRUE是存在的,我试图擦除我的SQL表,并再次运行相同的代码。

我得到以下错误:

Erreur dans sqlColumns(channel, tablename) : 
    ‘[testsFelix].[dbo].[TREB]’: table not found on channel 

所以我很困惑,当我想追加[R说,它不能因为表是存在的,当表不存在,R表示,不能在其中放置信息,因为表不在那里。我进入SQL来验证没有发生任何事情,但我看到R已经创建了具有正确列名称(Noinscr)的表格,但表格是空的。

请告诉我我做错了什么。 谢谢

+0

没有答案!!!! :'( – Felixthecat

+0

给我们一个可重复的例子来工作。 –

回答

2

我发现这篇文章谷歌搜索类似的问题。重新启动R后,问题仍然存在,并且系统重新启动。我通过打开一个新的连接到不同的数据库,并使用sqlSave写入该数据库,将问题缩小到数据库。

古怪,与原来的数据库问题是它使用R通过打开和关闭修正:

DBchannel <- odbcConnectAccess(access.file = "C:/myPath/Data.mdb") 
odbcClose(DBchannel) 

这样做了以后,下面的测试工作只是罚款:

require(RODBC) 
dd <- data.frame('normal' = rnorm(100), 'uniform' = runif(100)) 
DBchannel <- odbcConnectAccess(access.file = "C:/myPath/Data.mdb") 
sqlSave(DBchan, dd, tablename='testtable') 
odbcClose(DBchannel) 

(这是不错,因为我最初的(非)解决方案是重建数据库)

0

我一直在努力与你同样的问题。我可以调用odbcQuery逐行插入数据。但是,我的数据帧有几十万行。这是插入oslow的一种。如果你的数据集不大,你可以试试。

-1

请试试这个

sqlSave(channel, b, "_b", append = TRUE, 
    rownames = FALSE, colnames = FALSE, safer = TRUE, fast = FALSE) 

我发现什么是,Excel将添加在默认的文件名前面的“_”,如果您添加到文件名,Excel将找到表。

+0

从错误消息看来,连接到SQL服务器而不是Excel文件。 –

3

我有同样的问题。我意识到,默认情况下,sqlSave会在'Master'模式下创建表。我启动了ODBC数据源管理器并更改了默认数据库并选择了所需的数据库并且它工作正常。

-1

你必须删除括号([]),然后它应该运行良好。