Tout d'abord, je dois utiliser R pour obtenir le résultat de la requête SQL de la base de données HANA, que je termine en utilisant RODBC dans Rstudio. Deuxièmement, j'ai besoin de partager mon code avec d'autres, que j'utilise shinyapps.io pour terminer.Erreur "premier argument" lors de l'utilisation de shinyapps.io, rodbc pour afficher le résultat de la requête sql dans web
Cependant, je dois utiliser shinyapps pour montrer mon résultat de la requête SQL sur d'autres ordinateurs, que j'ai le message d'erreur suivant:
error first argument is not an open rodbc channel
J'ai utilisé la réponse de R shiny RODBC connection Failing, mais il ne fonctionne toujours pas.
Voici mes codes pour ui.R et sever.R attachés:
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
}))
}
pourrait quelqu'un s'il vous plaît aidez-moi ici? Comment utiliser shinyapps.io et RODBC pour afficher le résultat de la requête SQL sur les pages Web à partager? Selon la réponse, j'ai révisé un peu mon code. Mais sth weired arrive à nouveau. Lorsque j'utilise le code:
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
}))
}
Je les informations d'erreur:
Quand j'utiliser le code:
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)
}
)
Je les informations d'erreur:
Je suis sûr que la chaîne fonctionne. Si je viens d'utiliser l'application run pour ce faire:
shiny::runApp('//paper/fchen4/feng.officeworks/mycode/myShiny')
Cela fonctionne très bien. Mais je travaille dans une entreprise, je ne sais pas si le pare-feu ou sth pourrait avoir sth à faire avec cette erreur. Mais si je n'utilise pas SQL ici, c'est OK
Quelqu'un peut-il m'aider s'il vous plaît ici?
Merci beaucoup pour la réponse de Lars Br. Mais j'ai toujours un problème. Je vais cacher mes informations de connexion à l'étape suivante. Je suis sûr que le canal fonctionne parce que quand j'utilise shiny :: runApp ('// paper/fchen4/feng.officeworks/mycode/myShiny'), ça va. Pourriez-vous s'il vous plaît jeter un oeil ici encore? J'ajoute de nouveaux commentaires en fonction de votre réponse dans ma question –
Je pense que vous devez d'abord vous assurer que la connectivité entre le serveur SHINY et HANA fonctionne. Les DSN ODBC comme votre 'HANARB1P' dépendent généralement de l'utilisateur du système d'exploitation. Ainsi, si la partie serveur SHINY s'exécute sur une machine différente et/ou un utilisateur différent, ce DSN doit également être configuré pour cet utilisateur. –
J'utilise shinyapps.io basé sur le manuel de https://www.shinyapps.io/. Je pense qu'il fonctionne sur une machine différente. Mais je ne comprends pas ce que vous voulez dire un utilisateur différent? J'ai vu quelques informations sur odbcDriverConnect comme https://support.rstudio.com/hc/en-us/articles/225408367-Connecting-to-databases-using-RODBC-on-shinyapps-io. Pensez-vous que je devrais essayer odbcDriverConnect? –