2011-11-15 72 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

你必須刪除括號([]),然後它應該運行良好。