尝试在 Shiny 应用程序中显示来自 SQL 服务器查询的数据框时出现问题
Problem trying to display a data frame from an SQL Server query within a Shiny app
我想在 Shiny 中查询 SQL 服务器数据库。用户必须 select 一些项目和一些小部件来构建 SQL 查询,然后,由操作按钮触发,查询结果存储为数据框并用作 renderTable 的输入功能。无论我如何修复它,我总是收到消息:
cannot coerce type 'closure' to vector of type 'character'.
你能给我一些建议吗?
这是我的代码:
library(shiny)
library(RODBC)
# Builds conection chain ----
conection <- paste0('driver={', DriverDB, '}; ',
'server=', myServerDB, '; ',
'database = ', myDataBase, '; ',
'uid = ', myUser, '; ',
'pwd = ', myPassword, '; ',
'trusted_connection = true')
# Define UI ----
ui <- fluidPage(
titlePanel()),
sidebarLayout(
sidebarPanel(
radioButtons(...),
selectInput(...),
dateRangeInput(...),
actionButton('execute_query', 'Execute query'),
),
mainPanel(
tableOutput('result')
)
)
)
# Define server logic ----
server <- function(input, output) {
myQuery <- reactive({'builds query expression from widgets inputs'})
myData <- reactive({
req(input$execute_query)
result <- NULL
channel_db <- odbcDriverConnect(conection)
result <- sqlQuery(channel_db, myQuery)
odbcClose(channel_db)
result
})
output$result <- renderTable({myData()})
}
# Run the app ----
shinyApp(ui = ui, server = server)
我已经在 R 控制台中检查了 SQL 查询和连接的有效性,它们工作正常。
由于 myQuery
是反应性数据,您需要将其视为一个函数,就像您稍后对 myData
所做的那样。
使用:
myData <- reactive({
req(input$execute_query)
result <- NULL
channel_db <- odbcDriverConnect(conection)
result <- sqlQuery(channel_db, myQuery()) # <-- the only change, add ()
odbcClose(channel_db)
result
})
了解“闭包”类似于“函数”可能会有用。而且,对于所有意图和目的,反应性数据和反应性组件的出现和行为都像函数。
我想在 Shiny 中查询 SQL 服务器数据库。用户必须 select 一些项目和一些小部件来构建 SQL 查询,然后,由操作按钮触发,查询结果存储为数据框并用作 renderTable 的输入功能。无论我如何修复它,我总是收到消息:
cannot coerce type 'closure' to vector of type 'character'.
你能给我一些建议吗?
这是我的代码:
library(shiny)
library(RODBC)
# Builds conection chain ----
conection <- paste0('driver={', DriverDB, '}; ',
'server=', myServerDB, '; ',
'database = ', myDataBase, '; ',
'uid = ', myUser, '; ',
'pwd = ', myPassword, '; ',
'trusted_connection = true')
# Define UI ----
ui <- fluidPage(
titlePanel()),
sidebarLayout(
sidebarPanel(
radioButtons(...),
selectInput(...),
dateRangeInput(...),
actionButton('execute_query', 'Execute query'),
),
mainPanel(
tableOutput('result')
)
)
)
# Define server logic ----
server <- function(input, output) {
myQuery <- reactive({'builds query expression from widgets inputs'})
myData <- reactive({
req(input$execute_query)
result <- NULL
channel_db <- odbcDriverConnect(conection)
result <- sqlQuery(channel_db, myQuery)
odbcClose(channel_db)
result
})
output$result <- renderTable({myData()})
}
# Run the app ----
shinyApp(ui = ui, server = server)
我已经在 R 控制台中检查了 SQL 查询和连接的有效性,它们工作正常。
由于 myQuery
是反应性数据,您需要将其视为一个函数,就像您稍后对 myData
所做的那样。
使用:
myData <- reactive({
req(input$execute_query)
result <- NULL
channel_db <- odbcDriverConnect(conection)
result <- sqlQuery(channel_db, myQuery()) # <-- the only change, add ()
odbcClose(channel_db)
result
})
了解“闭包”类似于“函数”可能会有用。而且,对于所有意图和目的,反应性数据和反应性组件的出现和行为都像函数。