【问题标题】:shinyapps.io does not work when my shiny use RODBC to link a SQL database当我的闪亮使用 RODBC 链接 SQL 数据库时,shinyapps.io 不起作用
【发布时间】:2018-10-20 05:04:54
【问题描述】:

在我的本地电脑上,我使用shiny设计了一个网页来展示分析结果。数据是从公司的SQL数据库中提取出来的,使用RODBC将数据库链接到R。代码是这样的:

library(shiny)
library(shinydashboard)
library(DT)
library(RODBC)
library(stringr)
library(dplyr)
DNS <- '***'
uid <- '***'
pwd <- '***'
convertMenuItem <- function(mi,tabName) {
  mi$children[[1]]$attribs['data-toggle']="tab"
  mi$children[[1]]$attribs['data-value'] = tabName
  mi
}
sidebar <- dashboardSidebar(
  sidebarMenu(
    convertMenuItem(menuItem("Query1",tabName="Query1",icon=icon("table"),
                             dateRangeInput('Date1','Date Range',start = Sys.Date()-1, end = Sys.Date()-1,
                                            separator=" - ",format="dd/mm/yy"),
                             textInput('Office1','Office ID','1980'),
                             submitButton("Submit")), tabName = "Query1"),
    convertMenuItem(menuItem("Query2",tabName="Query2",icon=icon("table"),
                             dateRangeInput('Date2','Date Range',start = Sys.Date()-1, end = Sys.Date()-1,
                                            separator=" - ",format="dd/mm/yy"),
                             textInput('Office2','Office ID','1980'),
                             submitButton("Submit")), tabName = "Query2"),
  )
)
body <- dashboardBody(
  tabItems(
    tabItem(tabName="Query1",
            helpText('********************************'),
            fluidRow(
              column(12,DT::dataTableOutput('table1'))
              )
            ),
    tabItem(tabName = "Query2",h2("Widgets tab content"))
   )
)
dashboardheader <- dashboardHeader(
  title = 'LOSS PREVENTION'
) 
ui <- dashboardPage(
  skin='purple',
  dashboardheader,
  sidebar,
  body
)
server <- function(input, output) {
  output$table1 <- DT::renderDataTable({
    ch<-odbcConnect(DNS,uid=uid,pwd=pwd)
    a <- sqlQuery(ch,paste(' ***'))
    odbcClose(ch)
    DT::datatable(a,options = list(scrollX=T))
  })
}
shinyApp(ui, server)

然后,我在 shinyapps.io 上拥有我的帐户。并使用 rsconnect 来部署这个程序。并且部署成功。

但是当我使用https://myAccount.shinyapps.io/myshiny/ 访问我的代码时。我有以下错误:

2018-05-10T00:57:38.473259+00:00 shinyapps[340325]: Warning in RODBC::odbcDriverConnect("DSN=****;UID=****;PWD=****") :
2018-05-10T00:57:38.473262+00:00 shinyapps[340325]:   [RODBC] ERROR: state IM002, code 0, message [unixODBC][Driver Manager]Data source name not found, and no default driver specified

但是,如果我的代码中没有涉及 RODBC 和 SQL 数据库,则代码可以正常工作。

所以,问题是因为s​​hinyapps.io 无法访问我公司的SQL 数据库。我该如何处理?

【问题讨论】:

    标签: sql r shiny rodbc shinyapps


    【解决方案1】:

    该应用程序可以在您的计算机上运行,​​因为那里已经配置了数据源名称 (DSN)。它没有在 shinyapps.io 上配置。根据this help article,您可以使用例如

    odbcDriverConnect('Driver=FreeTDS;TDS_Version=7.0;Server=<server>;Port=<port>;Database=<db>;Uid=<uid>;Pwd=<pw>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;')
    

    可以在documentation 中找到更完整的处理方法。

    【讨论】:

    • 谢谢。我也有防火墙的问题。整个工作对我来说看起来很复杂。
    猜你喜欢
    • 2020-07-16
    • 2018-04-08
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多