sql - 尝试在 Shiny 应用程序中显示来自 SQL Server 查询的数据框时出现问题
问题描述
我想在 Shiny 中查询一个 SQL Server 数据库。用户必须选择一些带有一些小部件的项目来构建 SQL 查询,然后,由操作按钮触发,查询的结果存储为数据框并用作 renderTable 函数的输入。无论我做什么来修复它,我总是会收到以下信息:
不能将“闭包”类型强制为“字符”类型的向量。
你能给我一些建议吗?
这是我的代码:
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
})
知道“闭包”类似于“函数”可能很有用。而且,出于所有意图和目的,响应式数据和响应式组件的出现和行为类似于函数。
推荐阅读
- discord - 嵌入 Discord.js 也发送命令
- python-3.x - 我的 kivy 代码没有显示任何内容。请告诉我哪里出错了
- reactjs - 更新到“^0.9.1”后报错:org.unimodules.adapters.react.apploader 包不存在
- apache-kafka - Spring Kafka 连接到 Kafka 所需的 SSL 配置是什么?
- java - 合并三个具有相同键的地图
- r - 使用 facet_grid() 调整条形图的百分比小数
- node.js - 我需要在反应后删除用户反应
- python - Python / 为我的海龟对象创建一个类
- vbscript - 如何以普通用户在 VBScript 中不可见地执行特权命令
- assembly - 进入保护模式后尝试 jmp 时出错 - 程序集引导加载程序