我正在构建一个闪亮的应用程序,它将允许用户对sqlite3数据库中存在的表进行CRUD操作。我正在使用typeof(T)
中的input$table_rows_selected()
函数来获取用户选择的行的索引。然后,我尝试从数据库中删除具有匹配时间戳(将纪元时间存储为主键)的行(使用操作按钮DT
)。以下代码可以正常运行,但不会删除所选行。
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
为什么这不起作用?如果可以,是否有任何方法可以刷新数据表的输出而不必重新加载应用程序?
答案 0 :(得分:1)
正如@RomanLustrik所指出的,timestamp
肯定发生了一些“笨拙”的变化。我对sqlite
不太了解,但是运行PRAGMA table_info(TonnageListChartering);
显示了这一点:
0|vesselName||0||0
1|empStatus||0||0
2|openPort||0||0
3|openDate||0||0
4|source||0||0
5|comments||0||0
6|updatedBy||0||0
7|timestamp||0||1
8|VesselDetails||0||0
9|Name||0||0
10|VslType||0||0
11|Cubic||0||0
12|DWT||0||0
13|IceClass||0||0
14|IMO||0||0
15|Built||0||0
16|Owner||0||0
我猜没有一个变量定义了数据类型,我不确定现在是否可以这样做。无论如何,我更改了query
以确保时间戳在引号中。
query <- glue::glue_sql("DELETE FROM TonnageListChartering
WHERE TonnageListChartering.timestamp = '{timestamp}'
", .con = conn)
这将删除用户选择的行。
但是,当我只剩下一行时,我无法将其删除。不知道为什么。也许是因为我在创建表时定义了主键?