使用 shinyapps.io、rodbc 在 web 中显示 sql 查询结果时出现“第一个参数”错误
“first argument“ error when using shinyapps.io, rodbc to show sql query result in web
首先,我需要使用 R 从 HANA 数据库中获取 SQL 查询结果,我在 Rstudio 中使用 RODBC 完成。
其次,我需要与其他人分享我的代码,我用 shinyapps.io 来完成。
但是,我需要使用 shinyapps 在其他计算机上显示我的 SQL 查询结果,我有以下错误消息:
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查询结果显示在分享的网页上?
根据回答,我稍微修改了我的代码。但是奇怪的事情又发生了。当我使用代码时:
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
}))
}
我有错误信息:
当我使用代码时:
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)
}
)
我有错误信息:
我确定该频道有效。如果我只使用 运行 应用来执行此操作:
shiny::runApp('//paper/fchen4/feng.officeworks/mycode/myShiny')
它工作正常。但是我在一家公司工作,我不知道我的防火墙是否与此错误有关。但是如果我这里不用SQL就OK了
嗯,你检查过频道是否真的打开了吗?
错误消息可能是凭据错误、无法访问的服务器或任何其他会阻止成功 SQL 连接的结果。
使用以下代码显示 table 内容没有问题:
ui.R
library(shiny)
# Define UI for application that draws a histogram
shinyUI(fluidPage(
# Application title
titlePanel("Basic Data Table"),
fluidRow(
dataTableOutput("table")
)
))
server.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)
}
)
没有理由围绕 SQL 查询的结果调用 DT::datatable()
,因为它已经 returns 一个可以输入 renderDataTable()
的数据框。
一些一般提示:
永远不要将您的登录数据放入应用程序代码中。在 SCN 博客中
“HANA 快速说明——检查我的连接并安全地使用它们
…" 我解释了如何安全地存储和使用 SAP HANA 系统的连接和登录数据。这也为您提供了一种非常简单的方法来检查与 HANA 实例的连接。
此外,仅指向 ODBC DSN 连接而不是提供所有参数看起来更干净。
您不需要 ui.R
文件中的所有 R 库,因为使用 RODBC
等库的代码位于 server.R
文件中。确保在每个文件中包含最少的必需库,让您的生活更轻松。
像我对您的 "calling-SQL-statement-convert-resultset-data-type-feed-it-into-render-function" 所做的那样,分解长的嵌套函数参数调用并没有什么坏处。当一行中没有太多命令时,更容易了解发生了什么,哪里发生了什么失败。
这应该适合你。
首先,我需要使用 R 从 HANA 数据库中获取 SQL 查询结果,我在 Rstudio 中使用 RODBC 完成。
其次,我需要与其他人分享我的代码,我用 shinyapps.io 来完成。
但是,我需要使用 shinyapps 在其他计算机上显示我的 SQL 查询结果,我有以下错误消息:
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查询结果显示在分享的网页上?
根据回答,我稍微修改了我的代码。但是奇怪的事情又发生了。当我使用代码时:
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
}))
}
我有错误信息:
当我使用代码时:
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)
}
)
我有错误信息:
我确定该频道有效。如果我只使用 运行 应用来执行此操作:
shiny::runApp('//paper/fchen4/feng.officeworks/mycode/myShiny')
它工作正常。但是我在一家公司工作,我不知道我的防火墙是否与此错误有关。但是如果我这里不用SQL就OK了
嗯,你检查过频道是否真的打开了吗? 错误消息可能是凭据错误、无法访问的服务器或任何其他会阻止成功 SQL 连接的结果。
使用以下代码显示 table 内容没有问题:
ui.R
library(shiny)
# Define UI for application that draws a histogram
shinyUI(fluidPage(
# Application title
titlePanel("Basic Data Table"),
fluidRow(
dataTableOutput("table")
)
))
server.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)
}
)
没有理由围绕 SQL 查询的结果调用 DT::datatable()
,因为它已经 returns 一个可以输入 renderDataTable()
的数据框。
一些一般提示:
永远不要将您的登录数据放入应用程序代码中。在 SCN 博客中 “HANA 快速说明——检查我的连接并安全地使用它们 …" 我解释了如何安全地存储和使用 SAP HANA 系统的连接和登录数据。这也为您提供了一种非常简单的方法来检查与 HANA 实例的连接。 此外,仅指向 ODBC DSN 连接而不是提供所有参数看起来更干净。
您不需要
ui.R
文件中的所有 R 库,因为使用RODBC
等库的代码位于server.R
文件中。确保在每个文件中包含最少的必需库,让您的生活更轻松。像我对您的 "calling-SQL-statement-convert-resultset-data-type-feed-it-into-render-function" 所做的那样,分解长的嵌套函数参数调用并没有什么坏处。当一行中没有太多命令时,更容易了解发生了什么,哪里发生了什么失败。
这应该适合你。