我正在开发一个使用有光泽的应用程序,它将从数据库(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)