【发布时间】:2018-08-18 07:49:44
【问题描述】:
我正在构建一个闪亮的应用程序,它将允许用户对存在于 sqlite3 数据库中的表进行 CRUD 操作。我正在使用DT 中的input$table_rows_selected() 函数来获取用户选择的行的索引。然后,我尝试从数据库中删除具有匹配时间戳(存储为主键的纪元时间)的行(使用操作按钮 deleteRows)。以下代码运行没有任何错误,但不会删除选定的行。
observeEvent(input$deleteRows, {
if(!is.null(input$responsesTable_rows_selected)){
s=input$responsesTable_rows_selected
conn <- poolCheckout(pool)
lapply(length(s), function(i){
timestamp = rvsTL$data[s[i],8]
query <- glue::glue_sql("DELETE FROM TonnageListChartering
WHERE TonnageListChartering.timestamp = {timestamp}
", .con = conn)
dbExecute(conn, sqlInterpolate(ANSI(), query))
})
poolReturn(conn)
# Show a modal when the button is pressed
shinyalert("Success!", "The selected rows have been deleted. Refresh
the table by pressing F5", type = "success")
}
})
pool 是一个全局级别的处理程序,用于连接到数据库。
pool <- pool::dbPool(drv = RSQLite::SQLite(),
dbname="data/compfleet.db")
为什么这不起作用?如果是这样,是否有任何方法可以刷新数据表输出而无需重新加载应用程序?
【问题讨论】:
-
您是否尝试过打印查询以查看它是否真的与您要删除的内容匹配?我的猜测是时间戳有一些时髦的东西。
-
@RomanLuštrik 我查过了。似乎还好。这是我单击特定行时查询生成的内容
DELETE FROM TonnageListChartering WHERE TonnageListChartering.timestamp = 1534569538