Обновление данных из таблицы базы данных SQL Server через приложение Shiny
Я хочу разработать приложение с блестящей, и я только начал с R(так что вы можете себе представить...).
Прямо сейчас мне удалось подключить мое блестящее приложение к Microsoft SQL Server(через библиотеку DBI) и показать одну из 3 таблиц, которые у меня есть в этой базе данных.
Цель состоит в том, чтобы позволить пользователю щелкнуть строки и изменить данные в них. В этом случае только один столбец, который принимает только 1 или 0 в качестве значений. Мне удалось создать кнопку, но я не могу позволить приложению позволить мне щелкнуть строку и изменить данные.
Вот код, который у меня есть:
# Load libraries
library(shiny)
library(shinydashboard)
library(RODBC)
library(odbc)
library(pool)
library(DBI)
# connect database
con = DBI::dbConnect(odbc::odbc(),
Driver = "SQL Server",
Server = "MyServer",
Database = "test",
Trusted_Connection = "True")
# Start the dashboard
ui = dashboardPage(
dashboardHeader(title = 'My_first_App'),
dashboardSidebar(
sidebarMenu(
menuItem("Tables", tabName = "tables", icon = icon("th")),
menuItem("Perfomance Dashboard", tabName = "dashboard", icon = icon("dashboard"))
)
),
dashboardBody(
tabItems(
# item for tables(Table_1 in this case)
tabItem(tabName = "tables",
fluidRow(
box(tableOutput("tbl")),
# Tick box to allow the user to change data
box(title = "Column_to_change",
checkboxInput("Column_to_change", "Column_to_change", FALSE)),
#action buttons
actionButton("submit", "Submit"),
actionButton("new", "New")
))
)
)
)
server = function(input, output) {
# We get the Table_1 to show all of it
output$tbl = renderTable({
sql = "SELECT * FROM Table_1;"
query = sqlInterpolate(con, sql, id = input$ID)
dbGetQuery(con, query)
})
}
shinyApp(ui, server)
1 ответ
Вы можете использовать пакет DTEdit для создания редактируемых таблиц хорошего качества и просмотра данных в inyApp. Синтаксис тихий, легкий и удобный для пользователя.
https://github.com/jbryer/DTedit
my.insert.callback <- function(data, row) {
mydata <- rbind(data, mydata)
return(mydata)
}
my.update.callback <- function(data, olddata, row) {
mydata[row,] <- data[1,]
return(mydata)
}
my.delete.callback <- function(data, row) {
mydata[row,] <- NULL
return(mydata)
}
DTedit::dtedit(input, output,
name = 'mycontacts',
thedata = mydata,
edit.cols = c('name', 'email', 'useR', 'notes'),
edit.label.cols = c('Name', 'Email Address', 'Are they an R user?', 'Additional notes'),
input.types = c(notes='textAreaInput'),
view.cols = c('name', 'email', 'useR'),
callback.update = my.update.callback,
callback.insert = my.insert.callback,
callback.delete = my.delete.callback)