2014-11-02 82 views
0

我真的被困在這裏。我在Mac OSX上創建了一個SQLite數據庫,現在我正試圖在Windows上將數據插入到它。我在兩個平臺上使用RSQLite庫在R中執行此操作。在Mac OSX上創建的RSQLite數據庫沒有在Windows上插入數據

我試圖插入來自數據幀x數據:

> str(x) 
'data.frame': 6 obs. of 12 variables: 
$ Julian : int ... 
$ Date  : chr ... 
$ Time  : chr ... 
$ ID  : chr ... 
$ Item  : chr ... 
$ Value : num ... 
$ Payment : chr ... 
$ Type  : chr ... 
$ Customer : chr ... 
$ Operator1: chr ... 
$ Operator2: chr ... 
$ Weekday : int ... 

我嘗試以下步驟,並得到以下錯誤消息:

> db=dbConnect(dbDriver("SQLite"),dbname=f) 
> dbSendQuery(db,"INSERT INTO Entries VALUES(?,?,?,?,?,?,?,?,?,?,?,?)",x) 
Error in .local(conn, statement, ...) : 
    unused argument (list(...)) 

UPDATE:下面的建議由vaettchen使用dbWriteTable與append = TRUE工作,謝謝。但是,仍然存在與dbSendQuery的問題,請參見試圖刪除具有ID = 74的所有條目時,提示以下錯誤:

> dbSendQuery(db,"DELETE FROM Entries WHERE ID=?",id) 
Error in .local(conn, statement, ...) : unused argument (74) 

得到任何幫助,它可能只是一些愚蠢的事我看不到。非常感謝。

+1

您認爲'dbWriteTable'與'append = TRUE'? – vaettchen 2014-11-02 10:16:04

+0

太棒了,這工作。但我仍然有一個dbSendQuery的問題,我相應地更新了這個問題。 – valuenaut 2014-11-02 11:51:16

回答

1

下面是我在這種情況下是什麼在起作用:

id <- 74 
sql <- paste("DELETE FROM Entries WHERE ID=", id) 
dbGetQuery(db, sql) 

如果你想刪除多個ID,使用循環:

id <- c(73, 74, 78) 
for(i in id) 
{ 
    sql <- paste("DELETE FROM Entries WHERE ID=", i) 
    dbGetQuery(db, sql) 
} 

聲明:我只是一個很偶爾使用RSQLite用戶,並且從未直接使用dbSendQuery。它可能會爲大型數據庫或頻繁的批量更新帶來性能提升。