2017-06-26 15 views
0

まず、RANを使用してHANAデータベースからSQLクエリ結果を取得する必要があります。shinyapps.io、rodbcを使用してwebでsqlクエリの結果を表示するときに "first argument"エラーが発生する

他にも私のコードを他人と共有する必要があります。私はshinyapps.ioを使ってこれを完成させます。

はしかし、私は次のエラーメッセージを持っている他のコンピュータ上で私のSQLクエリの結果を表示するためにshinyappsを使用する必要があります。

error first argument is not an open rodbc channel 

私はR shiny RODBC connection Failingからの回答を使用し、それはまだ動作しません。ここで

はui.Rとsever.Rのための私のコードが添付されています

ui.R:

library(dplyr) 
library(RODBC) 
library(stringr) 
library(ggplot2) 
fluidPage(
    titlePanel("Basic DataTable"), 
    fluidRow(
    DT::dataTableOutput("table") 
) 
) 

sever.R:

library(dplyr) 
library(RODBC) 
library(stringr) 
library(ggplot2) 
ch<-odbcConnect('HANARB1P',uid='****',pwd='****') 
options(scipen = 200) 
myOffice <- 0 
StartDate <- 20170601 
EndDate <- 20170610 
office_clause = "" 
if (myOffice != 0) { 
    office_clause = paste(
    'AND "_outer"."/BIC/ZSALE_OFF" IN (',paste(myOffice, collapse=", "),')' 
) 
} 
function(input, output) { 
    output$table <- DT::renderDataTable(DT::datatable({ 
    data <- sqlQuery(channel=ch,query=paste(' SELECT TOP 100 
                "/BIC/ZSALE_OFF" AS "SalesOffice", 
                "/BIC/ZHASHPAN" AS "CreditCard" 
              FROM "SAPB1P"."/BIC/AZ_RT_A212" 
              WHERE "CALDAY" BETWEEN',StartDate,'AND',EndDate,' 
                ',office_clause,' 
           ')) 
    data 
    })) 

}

でした誰も私をここで助けてください? shinyapps.ioとRODBCを使用してSQLクエリの結果をWebページに表示して共有するにはどうすればいいですか?

答えによれば、コードを少し修正しました。しかし、疲れていた。私はコードを使用する場合:

:私はエラー情報を持っている

shinyServer(
function(input, output) { 
    data <- sqlQuery(channel=ch,query=paste(' SELECT TOP 50 
               "/BIC/ZSALE_OFF" AS "SalesOffice", 
                "/BIC/ZHASHPAN" AS "CreditCard" 
               FROM "SAPB1P"."/BIC/AZ_RT_A212" 
               WHERE "CALDAY" BETWEEN',StartDate,'AND',EndDate,' 
                ',office_clause,' 
              ')) 
    output$table <- DT::renderDataTable(data) 
} 
) 

enter image description here

私はコードを使用します。

function(input, output) { 
    output$table <- DT::renderDataTable(DT::datatable({ 
    data <- sqlQuery(channel=ch,query=paste(' SELECT TOP 50 
               "/BIC/ZSALE_OFF" AS "SalesOffice", 
                "/BIC/ZHASHPAN" AS "CreditCard" 
               FROM "SAPB1P"."/BIC/AZ_RT_A212" 
               WHERE "CALDAY" BETWEEN',StartDate,'AND',EndDate,' 
                ',office_clause,' 
              ')) 
    data 
    })) 
} 

を私はエラー情報を持っています

enter image description here

チャンネルが機能していると確信しています。私はこれを行うために実行するアプリを使用する場合:

shiny::runApp('//paper/fchen4/feng.officeworks/mycode/myShiny') 

をそれは正常に動作します。しかし、私は会社で働いていますが、私はファイアウォールかsthがこのエラーと関係があるかもしれないかどうかわかりません。しかし、ここでSQLを使用しないとOKです。

誰も私を助けてくれませんか?

答えて

2

さて、チャネルが実際に開いていることを確認しましたか? エラーメッセージは、間違った資格情報、到達不能なサーバー、またはSQL接続が正常に行われない原因となる可能性があります。

ui.R

library(shiny) 

# Define UI for application that draws a histogram 
shinyUI(fluidPage(

    # Application title 
    titlePanel("Basic Data Table"),  
    fluidRow(
     dataTableOutput("table") 
    ) 
)) 

サーバー:

は、私は次のコードを持つテーブルの内容を示す問題はなかったです。R

library(shiny) 
library(RODBC) 

ch <- odbcConnect("S12") 

# Define server logic to provide table output 
shinyServer(
    function(input, output) { 

     query_result <- sqlQuery(channel = ch, query = 'SELECT * FROM M_DATABASE') 
     output$table <- renderDataTable(query_result) 
    } 
) 

それはすでにrenderDataTable()に供給することができるデータフレームを返すように、SQLクエリの結果を中心にDT::datatable()をコールする理由はありません。

いくつかの一般的なヒント:

  • アプリケーションコードにあなたのログオンデータを置くことはありません。 SCN Blog "HANA quick note – checking my connections and using them securely …"では、SAP HANAシステムの接続とログオンデータを安全に保存して使用する方法について説明しました。これにより、HANAインスタンスへの接続性を簡単に確認することもできます。 さらに、すべてのパラメータを提供するのではなく、ODBC DSN接続を指すだけで、よりきれいに見えます。

  • ui.Rファイル内のすべてのRライブラリが、ファイル内のRODBCのようなライブラリを使用するコードとして必要なわけではありません。あなたの人生をもっと楽にするために、すべてのファイルに最低限必要なライブラリがあることを確認してください。

  • "呼び出し側SQL文の変換結果セットのデータ型フィードをレンダリングする関数"を使用しているので、長いネストされた関数のパラメータ呼び出しを分割しても問題ありません。 が失敗するどこで何が起こるかを追う方がずっと簡単です。ここでは、1行にあまり多くのコマンドがない場合です。

これはうまくいくはずです。

+0

Lars Br。の答えに感謝します。しかし、私はまだ何か問題があります。私は次のステップで自分のログイン情報を隠します。 shiny :: runApp( '/ paper/fchen4/feng.officeworks/mycode/myShiny')を使用するとチャンネルが正常に機能していると確信しています。もう一度見てみてください。私はあなたの答えに基づいていくつかの新しいフィードバックを追加します。 –

+0

まず、SHINYサーバとHANAの間の接続が機能していることを確認する必要があります。あなたの 'HANARB1P'のようなODBC DSNは通常、OSユーザに依存しています。したがって、SHINYサーバー部分が別のマシンおよび/または別のユーザーで実行されている場合、このDSNもこのユーザー用に設定する必要があります。 –

+0

私はhttps://www.shinyapps.io/のマニュアルに基づいてshinyapps.ioを使用しています。私はそれが別のマシンで動作すると思います。しかし、私はあなたが別のユーザーを意味するのか分からないのですか?私は、https://support.rstudio.com/hc/en-us/articles/225408367-Connecting-to-databases-using-RODBC-on-shinyapps-ioのようなodbcDriverConnectに関するいくつかの情報を見ました。 odbcDriverConnectを試してみるべきだと思いますか? –

関連する問題