2017-05-02 8 views
1

私が思ったようにこのプロセスを理解できないと思います。私は下のリンクを見つけました。それはかなり役に立つと思われますが、わずかな変更を加えた後、私は自分が望むことをすることができません。Shiny Appを使用してSQL Serverデータベースを照会する

R Shiny SQL Server Query

私はちょうどWebページを起動して、クエリに渡すことを、ユーザーがパラメータを入力したいです。

library(RODBCext) 
library(shiny) 

ui <- shinyUI(

    pageWithSidebar(

    headerPanel("Hide Side Bar example"), 
    sidebarPanel(
     textInput("CATEGORY", "Enter CATEGORY below"), 
     submitButton(text="Submit") 
    ), 
    mainPanel(
     tabsetPanel(
      tabPanel("Data", tableOutput("tbTable")) 
    ) 

    ) 
) 
) 

browser() 

server <- function(input, output, session)  
    myData <- reactive({ 
    req(input$Id) 

    #connect to database 
    dbhandle = odbcDriverConnect('driver={SQL Server};server=my_server;database=data_WH;trusted_connection=true') 

    browser() 

    #build query 
    #query = "SELECT * FROM [my_db].[dbo].[my_table] where [CATEGORY] = '1070'" 
query = "SELECT * FROM [my_db].[dbo].[my_table] where [CATEGORY] = ?" 

    browser() 

    #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) 

SQL文字列は問題ありません。スクリプトをデバッグしようとすると、私はブラウザに入りました。下記のリンクを参照してください。

https://shiny.rstudio.com/articles/debugging.html

ブラウザ()

それはコードを一時停止しませんでした。私はコードをデバッグするのに役立たなかった。それは全く何もしなかった。

誰でも考えられますか?

+0

入力$ idを入力して$ CATEGORYを最初のステップとして入力してください – awchisholm

+0

さて、それは素晴らしいキャッチawchisholmでした!あなたが推奨する変更を加えましたが、問題を解決しませんでした。私はまだIDを入力することはできませんし、私のブラウザのウィンドウで結果を参照してください。有効なIDを入力してボタンをクリックすると、何も表示されません。私はそれがスクリプトのことですが。私がコードを完全に誤解していない限り。何があっても、私は間違いなくシャイニーIQを高める必要があります。 – ryguy72

答えて

1

サーバー機能が正しく定義されていないようです。

あなたのかっこを配置しなかったので、

fn <- function(arg1, arg2) 
expression1 

expression2 

が実際にあなたのserver機能で

fn <- function(arg1, arg2){ 
    expression1 
} 

expression2 

として評価されようとしているフォームの定義関数、唯一の表現関数定義は myDataを生成しています。あなたの output$tbTable要素はあなたの関数から完全に分離されており、決してアプリケーションで呼び出されないので、あなたの反応は決して処理されません。これを試してください:

library(RODBCext) 
library(shiny) 

ui <- shinyUI(

    pageWithSidebar(

    headerPanel("Hide Side Bar example"), 
    sidebarPanel(
     textInput("CATEGORY", "Enter CATEGORY below"), 
     submitButton(text="Submit") 
    ), 
    mainPanel(
     tabsetPanel(
     tabPanel("Data", tableOutput("tbTable")) 
    ) 

    ) 
) 
) 

server <- function(input, output, session)  
{ # NOTE THE BRACE HERE 
    myData <- reactive({ 
    req(input$CATEGORY) 

    #connect to database 
    dbhandle = odbcDriverConnect('driver={SQL Server};server=my_server;database=data_WH;trusted_connection=true') 

    #build query 
    #query = "SELECT * FROM [my_db].[dbo].[my_table] where [CATEGORY] = '1070'" 
    query = "SELECT * FROM [my_db].[dbo].[my_table] where [CATEGORY] = ?" 

    #store results 
    res <- sqlExecute(channel = dbhandle, 
         query = query, 
         data = list(input$CATEGORY), 
         fetch = TRUE, 
         stringsAsFactors = FALSE) 

    #close the connection 
    odbcClose(dbhandle) 
    #return results 
    res 
    }) 

    output$tbTable <- 
    renderTable(
     myData() 
    ) 

} # AND NOTE THE CLOSING BRACE HERE 

shinyApp(ui = ui, server = server) 
+0

非常にクール!! Benjaminさん、ありがとう! – ryguy72

+0

こんにちはryguy72、これはあなたの仕事でしたか?私はこの権利を得るために苦労しています。エラー:odbcValidChannel(チャネル)がTRUEではないというエラーが表示されます。 – Sourabh

関連する問題