【问题标题】:How can I prevent RMySQL errors and show to user in Shiny?如何防止 RMySQL 错误并在 Shiny 中向用户显示?
【发布时间】:2019-06-12 03:01:27
【问题描述】:

我有一个 Shiny 应用程序,它执行对 MySQL 数据库的查询,如下例所示:

用户界面

textAreaInput("query")

服务器

data <- reactive({
  df<-dbGetQuery(conection, input$query)
  return(df)
})

问题在于,当用户在 textAreaInput 中输入错误的语法时,Shiny App 会关闭,并且错误会显示在 R 控制台中。

我想要的是在应用程序中打印该错误,以便用户可以重试并编写另一个查询。

有人可以帮帮我吗?

【问题讨论】:

标签: r shiny rmysql


【解决方案1】:

我们可以使用tryCatch。这是一个基于@Fan Li 的回答here 的完整示例

library(RSQLite)
con <- dbConnect(SQLite(), dbname="sample.sqlite")
dbWriteTable(con, "test", data.frame(value1 = letters[1:4], value2 = letters[5:8]))
dbDisconnect(con)

library(shiny)
library(RSQLite)
runApp(list(
  ui = bootstrapPage(
    #select * from te fail
    #select * from test work
    textAreaInput("query",'Query'),
    actionButton("action", label = "Run Query"),
    hr(),
    tableOutput("table")
  ),
  server = function(input, output){
    #Reactive is eager by definition and it will signal unreal/annoying errors, hence I used eventReactive
    data <- eventReactive(input$action,{
      tryCatch({
        con <- dbConnect(SQLite(), dbname="sample.sqlite")
        data<-dbGetQuery(con, input$query)
        dbDisconnect(con)
        return(data)
        }, 
               error = function(e){
                 showModal(
                   modalDialog(
                     title = "Error Occurred",
                     tags$i("Please enter valid query and try again"),br(),br(),
                     tags$b("Error:"),br(),
                     tags$code(e$message)
                   )
                 )
               })
    })
    output$table <- renderTable(data())
  }))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多