2017-06-13 52 views
0

我有一個文件server.R在下面的代碼爲我的[R閃亮的應用程序RShiny SQL數據框表

library(shiny) 
library(RODBC) 

shinyServer(function(input, output) { 

    myData <- reactive({ 

    conn <- odbcDriverConnect("driver={SQL Server};server=xxx;database=xxx;uid=xxx;pwd=xxx") 

    q <- paste("SELECT * FROM dbo.players") 

    res <- sqlQuery(channel=conn, query=q) 

    res 

    }) 

    output$tbTable <- renderTable({ 
    myData 
    }) 
}) 

我不斷收到錯誤:

Warning: Error in as.data.frame.default: cannot coerce class "c("reactiveExpr", "reactive")" to a data.frame 
Stack trace (innermost first): 
    79: as.data.frame.default 
    78: as.data.frame 
    77: origRenderFunc 
    76: output$tbTable 
    1: runApp 

我是新來的R,和不太瞭解如何進行轉換。我的理解是,res是data.frame類型的,renderTable將向量作爲參數。它也被封裝在一個被動函數中,因爲我最終希望使我的SQL查詢依賴於一些被動的輸入。我該如何解決這個錯誤?

+2

嘗試'myData的()'的'渲染...'功能 – patrick

+1

而且不要忘記在獲得數據後或會話結束後進行disconect。 – Batanichek

回答

0

感謝@patrik和@Batanichek,我想出了以下解決方案,效果很好:

library(shiny) 
library(RODBC) 

shinyServer(function(input, output, session) { 


    myData <- reactive({ 

    conn <- odbcDriverConnect("driver={SQL Server};server=xxx;database=xxx;uid=xxx;pwd=xxx") 

    q <- paste("SELECT * FROM dbo.players") 

    res <- sqlQuery(channel=conn, query=q) 

    odbcClose(conn) 

    res 

    }) 

    output$view <- renderTable({ 
    head(myData(), input$rows) # render only the first (input$rows) rows 
    }) 
})