【问题标题】:TextInput not giving results in shiny RTextInput 没有在闪亮的 R 中给出结果
【发布时间】:2020-02-04 06:38:14
【问题描述】:

我正在制作一个应用程序,用户将在其中输入公司的 id(即 PID)并单击提交以从 SQL Server 数据库中获取结果。我已经创建了下面提到的代码,但代码没有在 SQL 查询中获取输入值。请帮忙。到目前为止我创建的代码是 -

#install.packages("RODBC")
#install.packages("RODBCext")
library(shiny)
library(RODBC)
library(RODBCext)
library(DT)
library(sqldf)

#UI

ui<-fluidPage(

  #Application Title

  titlePanel(title = "The is Default Database UI Testing Version!!"),
  sidebarLayout(
    sidebarPanel(
      textInput("PID","Enter company's PID",""),
      submitButton("Submit", icon("table"))

    ),

    mainPanel(

      h4("Database information"),
      DT::dataTableOutput({"mydata"})
      #tableOutput("mydata")
    )



  ))

#server

shinyServer <- function(input,output)

{

  #connect to database

con = odbcConnect('DDB')


  #build query
  query <-
"
select [COMPANY].[COMP_ID],[COMPANY].[PID], [COMPANY].[COMP_NAME],[CNTRY_NAME],EVENT.[EVENT_ID],[EVENT],[CONSID_DESC],[EVENT_YR],[EVENT_MON],[EVENT_DAY],[PATH]
               from EVENT inner join [dbo].[COMPANY] on EVENT.[COMP_ID] = [dbo].[COMPANY].[COMP_ID]
               inner join [dbo].[EVENT_TYPE] on EVENT.[EVENT_TYPE_ID] = [dbo].[EVENT_TYPE].[EVENT_TYPE_ID]
               inner join [dbo].[SPECIAL_CONSIDERATION] on EVENT.[CONSID_ID] = [dbo].[SPECIAL_CONSIDERATION].[CONSID_ID]
               inner join [dbo].[COUNTRY] on [dbo].[COMPANY].[CNTRY_CD] = [dbo].[COUNTRY].[CNTRY_CD]
               left join [dbo].[EVENT_DOC] on EVENT.[EVENT_ID] = [dbo].[EVENT_DOC].[EVENT_ID]
               where PID = '?,input$PID'"
(
res <- sqlQuery(con,query))

#ddf<-data.frame('res')

 # df[qry$mydata == input$select_mydata, ]
  output$mydata = DT::renderDataTable({res})
  #output$mydata = renderPrint({res})

}
  shinyApp(ui, shinyServer)

【问题讨论】:

  • 没有对此进行测试,但看起来query 是错误的(无需多想)。我认为有,input$PID' 没有有效的SQL 语法。它应该类似于this

标签: r shiny shinydashboard shinyapps


【解决方案1】:

试试这个:

library(shiny)
library(RODBC)
library(RODBCext)
library(DT)
library(sqldf)

con <- odbcConnect('DDB')
query <- "select [COMPANY].[COMP_ID],[COMPANY].[PID], [COMPANY].[COMP_NAME],[CNTRY_NAME],EVENT.[EVENT_ID],[EVENT],[CONSID_DESC],[EVENT_YR],[EVENT_MON],[EVENT_DAY],[PATH] from EVENT inner join [dbo].[COMPANY] on EVENT.[COMP_ID] = [dbo].[COMPANY].[COMP_ID] inner join [dbo].[EVENT_TYPE] on EVENT.[EVENT_TYPE_ID] = [dbo].[EVENT_TYPE].[EVENT_TYPE_ID] inner join [dbo].[SPECIAL_CONSIDERATION] on EVENT.[CONSID_ID] = [dbo].[SPECIAL_CONSIDERATION].[CONSID_ID] inner join [dbo].[COUNTRY] on [dbo].[COMPANY].[CNTRY_CD] = [dbo].[COUNTRY].[CNTRY_CD] left join [dbo].[EVENT_DOC] on EVENT.[EVENT_ID] = [dbo].[EVENT_DOC].[EVENT_ID] where PID = MYSHINYPID"

ui <- fluidPage(
  titlePanel(title = "The is Default Database UI Testing Version!!"),
  sidebarLayout(
    sidebarPanel(
      textInput("PID","Enter company's PID",""),
      actionButton("Submit", icon("table"))

    ),
    mainPanel(
      h4("Database information"),
      dataTableOutput('mydata')
    )
  )
)


server <- function(session,input,output){

  sqldata <- eventReactive(input$Submit,{
    req(input$PID)
    query <- gsub("MYSHINYPID",input$PID,query)
    sqlQuery(con,query)
  })

  output$mydata <- DT::renderDataTable({
    sqldata()
  })

}

shinyApp(ui, server)
  1. 我们将使用字符串替换gsub 进行查询
  2. 然后将为 PID 添加req(),以便用户输入一些内容
  3. 理想情况下,连接应位于global,因此所有用户只能使用一次

【讨论】:

  • 非常感谢,但我仍然收到错误消息。错误:找不到对象“MYSHINYPID”
  • @AshishTalgotra,对不起,这应该是一个字符串,"MYSHINYPID"我的错
  • 先生,在我按照您的建议进行了必要的更改之后。我现在收到一个错误:“数据”必须是二维的(例如数据框或矩阵)。
  • 我认为这可能是 sql 查询的问题?
猜你喜欢
  • 2021-04-10
  • 2016-09-22
  • 2018-11-17
  • 1970-01-01
  • 2021-06-15
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多