栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

R Shiny SQL Server查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

R Shiny SQL Server查询

在此之前,您需要进行一些更改。需要指出的一些关键概念:

  1. 你没有
    output$tbTable
    对象。这意味着您的
    myData
    反应式永远不会被调用,因此您永远不会查询数据库。
  2. 您正在使用
    RODBC
    数据库连接,然后在中使用
    DBI
    样式参数
    sqlQuery
    。您应该使用
    DBI
    RSQLServer
    也许是,-我从未使用过)或
    RODBC
    (我经常使用)。
  3. dbhandle
    第一次调用后,您将关闭。这是预期的行为吗?用户应该只有一次机会访问数据库吗?

一些小注意事项:

  1. 我建议使用,
    RODBCext
    以便您可以使用参数化查询。
  2. Table
    是SQL中的保留字。我不确定这是否是占位符,但是将表组件包装在方括号中会很有帮助,例如[schema]。[table_name]。[column_name]
  3. 您没有将查询定向到架构。这可能会或可能不会出现问题。由于从未调用过查询,因此您没有机会查看它是否引发了错误。

我对您的代码的建议是:

library(RODBCext) # Also loads RODBClibrary(shiny)ui <- shinyUI(  pageWithSidebar(    headerPanel("Hide Side Bar example"),    sidebarPanel(      textInput("Id", "Enter Account Number below"),      submitButton(text="Submit")    ),    mainPanel(      tabsetPanel(        tabPanel("Data", tableOutput("tbTable"))      )    )  ))server <- function(input, output, session) {        myData <- reactive({    req(input$Id)    #connect to database     dbhandle = odbcDriverConnect(...)    #build query    query = "SELECt [Fullname] FROM [schema].[table_name] WHERe [ID] = ?"    #store results    res <- sqlExecute(channel = dbhandle, query = query,data = list(input$Id),fetch = TRUE,stringsAsFactors = FALSE)    #close the connection    odbcClose(dbhandle)    #return results    res  })  output$tbTable <-     renderTable(      myData()    )}shinyApp(ui = ui, server = server)

我似乎还记得有一种方法可以在会话关闭时关闭数据库连接,但是我无法使其按预期的方式工作

session$onSessionEnded(odbcClose(dbhandle))
,因此其他人也许可以填补那里的空白。

如果不想每次单击按钮都创建新连接,则可以在反应式外部创建连接,而不必关闭它。但是,这将留下一个挂起的连接,我不喜欢这样做。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415838.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号