使用闪亮的应用程序从SQL Server数据库导入文件

时间:2018-03-21 14:57:28

标签: r shiny

我正在开发一个使用有光泽的应用程序,它将从数据库(sql server)导入数据并在主面板中显示为有光泽。由于应用程序本质上是动态的,它将询问用户服务器详细信息,如服务器名称,数据库名称,用户ID ......。输入这些详细信息并单击“确定”按钮后,错误将显示在rstudio控制台中。

[RODBC] ERROR: state 08001, code 17, message [Microsoft][ODBC SQL Server 
Driver][DBNETLIB]SQL Server does not exist or access denied.
Warning: Error in sqlQuery: first argument is not an open RODBC channel

由于错误消息说“文件不存在或访问被拒绝”我设计了一个简易版本的应用程序,其中所有细节都是硬编码,如服务器名称,数据库名称,用户ID,密码,文件名,它工作得非常好,数据从闪亮的应用程序中的数据库加载。以下是服务器代码

output$display <- renderDataTable({
                  dbhandle <- odbcDriverConnect('driver={SQL Server};server=”my_server”;database=”database_name”;uid=”abc”;pwd=”123#')
                  e <- sqlQuery(dbhandle,paste("Select * from ##file_name_in_sqlserver))
                  as.data.frame(e)})

挑战在于,当我尝试将其设置为动态,用户将输入这些凭据时出现错误。看起来我很亲密,但遗漏了一些非常基本的东西。

非常感谢任何帮助!谢谢

library(shiny)
library(RODBC)

ui <- shinyUI(fluidPage(
titlePanel("fileinput"),
sidebarLayout(
sidebarPanel(
  radioButtons("filetype", "Select 2nd option",choices=c("csv file","From server")),

  #server selected and details entered 
  conditionalPanel(
    condition = "input.filetype == 'From server'",
    textInput("text1", label = h5("Server Name"), value = ""),
    textInput("text2", label = h5("Database Name"), value = ""),
    textInput("text3", label = h5("User Id"), value = ""),
    textInput("text4", label = h5("password"), value = ""),
    textInput("text5", label = h5("File name"), value = ""),
    actionButton("ok","update")
  )
  ),
mainPanel(
  dataTableOutput("display")
))))

server <- shinyServer(function(input, output) {

# importing from database
data <- reactive({
if(input$filetype=="csv file"){      
}else if(input$filetype == "From server"){
  input$ok
  isolate({a <- input$text1
  b <- input$text2
  c <- input$text3
  d <- input$text4
  dbhandle <- odbcDriverConnect('driver={SQL Server};server=a;database=b;uid=c;pwd=d')
  e<-sqlQuery(dbhandle,paste("Select * from input$text5"))
  databaseClose(dbhandle)
  as.data.frame(e)})
}else{
}})

# Display data
output$display <- renderDataTable({
data()})
})

shinyApp(ui, server)

0 个答案:

没有答案