Hi, all.
I am trying to create an application in shiny that allows me to save data in some tables that I have created. However, when I use my shinyApp the changes do not take effect. any recommendations? I'm using the dbwritetable function on the server
Global:
#Librerias
library(shiny)
library(shinydashboard)
library(shinyalert)
library(DT)
library(tidyverse)
library(fresh)
library(lubridate)
library(DBI)
library(RMariaDB)
#Conexion
con_analitica <- dbConnect(RMariaDB::MariaDB(),
dbname = "analitica",
host = Sys.getenv("host_a"),
port = 3306,
user = Sys.getenv("user_a"),
password = Sys.getenv("password_a"))
#Tablas de hechos
db_datos_ingreso <- tbl(con_analitica,"datos_ingreso")
db_cronograma_grupo <- tbl(con_analitica,"cronograma_grupos")
#Lectura Tablas de dimensiones
db_cargo <- tbl(src = con_analitica,"cargos")
db_capacitacion <- tbl(src = con_analitica,"capacitaciones")
db_facilitador <- tbl(src = con_analitica,"facilitadores")
db_grupos_registrado <- tbl(src = con_analitica,"grupos_registrados")
#load("tablas_dim.RData")
#Creando los choices
facilitadores_choices <- deframe(db_facilitadores %>% select(facilitador,id))
cargos_choices <- deframe(db_cargos %>% select(cargo, id))
capacitaciones_choices <- deframe(db_capacitaciones %>% select(capacitacion, id))
grupos_choices <- deframe(db_grupos_registrados %>% select(grupo,id))
#Desconectar base de datos
onStop(function() {
DBI::dbDisconnect(con_analitica)
})
ui<-dashboardPage(
dashboardHeader(title = "App Ingreso"),
dashboardSidebar(
sidebarMenu(id = "tabs",
menuItem(text = "Ingreso",tabName = "ingreso")
#,menuItem(text = "Registro",tabName = "registrar_tabla")
)),
dashboardBody(
use_theme(mytheme),#tema del global
conditionalPanel("input.tabs == 'ingreso'", #Pestana ingreso
fileInput("file", "Seleccione archivo csv:",# Carga de csv
multiple = FALSE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv"),buttonLabel = "Explorar...",
placeholder = "Ningún archivo seleccionado"),
helpText("Por favor seleccione el separador de su archivo."),
radioButtons("separator","Separador: ",choices = c(",",";",":"), selected=",",inline=TRUE),
selectInput("Capacitador", "Facilitador", choices = facilitadores_choices),
actionButton(inputId = "save", label = "Visualizar datos"),#Boton para visualizar datos
actionButton(inputId = "cargar", label = "Guardar"),#Boton para guardar datos
helpText("Visualización base de datos"),
dataTableOutput("tablainicial"))))
In this part I use dbwritetable function to upload the data to my datos_ingreso table. The curious thing is that if I do it manually the changes are registered in the table.
server<-function(input, output,session){
#---- Pestaña de ingreso ----
#Cargando el archivo csv
df_cargado <- eventReactive(input$save,{
#Inputs
inFile <- input$file
capacitadores <- input$Capacitador
separador_arch <- input$separator
if (is.null(inFile))
return(NULL)
#Lectura archivo
df <- read.csv(inFile$datapath, header = TRUE,sep = separador_arch)
#Limpieza
colnames(df) <- c("Cedula","Nombre","Cargo","Grupo") %>% str_to_title() #Estandarizando el nombre de las columnas
df <- df %>% mutate(Nombre=as.character(Nombre),Cargo=as.character(Cargo),Grupo=as.character(Grupo), Facilitador=as.numeric(capacitadores), Cedula= as.numeric(Cedula),Grupo=as.character(Grupo),Fecha_ingreso=as.Date(today()))%>%
rename(cedula = Cedula,nombre=Nombre,cargo=Cargo,grupo=Grupo,facilitador=Facilitador,fecha_ingreso=Fecha_ingreso)
#Uniendo con tabla_dim cargos para verificar existencia
db_cargo <- db_cargo %>% collect()
db_grupos_registrado <- db_grupos_registrado %>% collect()
db_facilitador <- db_facilitador %>% collect()
df <- df %>% left_join(db_cargo, by="cargo") %>%
left_join(db_cargo,by="id") %>%
select(-c(cargo.x,id)) %>% rename(cargo= cargo.y) %>%
left_join(db_grupos_registrado, by="grupo") %>%
left_join(db_grupos_registrado,by="id") %>%
select(-c(grupo.x,id)) %>%rename(grupo= grupo.y)%>%
left_join(db_facilitador,by = c('facilitador'="id")) %>%
select(-c(facilitador,celular,correo,cedula_facilitador))%>%rename(facilitador= facilitador.y) %>%
rename(Cedula=cedula,Nombre=nombre,Cargo=cargo,Grupo=grupo,Facilitador=facilitador,Fecha_ingreso=fecha_ingreso)
return(df)
})
#Visualizar tabla de ingreso: registro actual por el usuario
output$tablainicial<- renderDataTable({ #Visualizacion tabla de la sesion ingreso
datatable(df_cargado(),rownames = FALSE,style = 'auto',class = 'cell-border',options(searchHighlight = TRUE,DT.options = list(
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json'))))
})
#Verificando los faltantes no reconocidos de la tabla de ingreso.
faltantes <- reactive(
{nas <- sum(is.na(df_cargado()))
return(nas)})
#Boton de alerta para visualizar datos de ingreso
observeEvent(input$save, {
if (faltantes() > 0 |is.null(df_cargado())) {
shinyalert("Campos vacíos","Por favor verifique su registro antes de guardar",type ="warning")}
else{
shinyalert("Campos llenos","Guarde sus datos",type="success")}
})
#Logica del boton cargar: guardar datos en la nube
datos_iniciales <- eventReactive(input$cargar,{
df_upload <- df_cargado() %>%
rename(cedula=Cedula,nombre=Nombre,cargo=Cargo,grupo=Grupo,facilitador=Facilitador,fecha_ingreso=Fecha_ingreso) %>%
left_join(db_grupos_registrado, by="grupo") %>%
select(-grupo) %>% rename(grupo=id)%>%
left_join(db_cargo, by="cargo") %>%
select(-cargo) %>% rename(cargo=id) %>%
left_join(db_facilitador, by="facilitador") %>%
select(-facilitador) %>% rename(facilitador=id) %>%
select(cedula, nombre,fecha_ingreso, cargo, grupo, facilitador)%>%
mutate(cargo=as.double(cargo),grupo=as.double(grupo),facilitador=as.double(facilitador), cedula=as.double((cedula)),fecha_ingreso = as.Date(fecha_ingreso))
dbWriteTable(conn =con_analitica, name = "datos_ingreso",value = df_upload , append = T, overwrite = F)
})
Thank you very much