Compare commits

..

61 Commits

Author SHA1 Message Date
marcelcosta 560540cf1a Commit in cytometry. 2023-10-10 12:35:43 +02:00
marcelcosta bd52e8c452 Corrección nombre de fecha de extracción. Solución de bug. 2023-02-02 16:54:09 +01:00
marcelcosta 43b807cc63 Corrección de la función de backup. 2022-07-04 11:09:20 +02:00
marcelcosta cb38ea347d Añadir notificación de sincronización y backup de nitrógeno. 2022-07-04 11:08:45 +02:00
marcelcosta 6671939939 Cambiar sistema de pedir contraseña. 2022-07-04 10:58:27 +02:00
marcelcosta a6f0c97d47 Añadir la opción de pasar la ruta de citometría en texto. 2022-04-20 15:34:54 +02:00
marcelcosta 56484a5903 Volver a meter unas línias borradas por error. 2022-04-20 12:13:27 +02:00
marcelcosta b5323436ec Boleanas en la app. 2022-04-20 09:49:37 +02:00
marcelcosta a57fb3aac8 Gates booleanas se hacen en R y no en Flowjo (que enlentece mucho el análisis). 2022-04-06 16:54:51 +02:00
marcelcosta dbb8e1ed0d Merge branch 'dev' 2022-04-06 12:42:53 +02:00
marcelcosta e6c2a32ddb Corregir exportar png IC 2022-04-06 12:42:31 +02:00
marcelcosta 51acdd0ece Merge branch 'dev' 2022-04-06 12:35:16 +02:00
marcelcosta dcbf4f8b9d Canvi en l'ordre de les dependències. 2022-04-06 12:32:41 +02:00
marcelcosta 001f64cc76 Merge branch 'dev' 2022-04-06 11:18:24 +02:00
marcelcosta e95caafe28 Cambio a pie chart para Visor IC. 2022-04-05 16:57:26 +02:00
marcelcosta f45ebfd106 Merge branch 'dev' 2022-04-05 10:09:30 +02:00
marcelcosta cb6c739d14 Para actualizar la tabla Poblaciones de citometría, permitir que falten poblaciones (de cara a agrupar diferentes paneles). 2022-04-05 10:08:26 +02:00
marcelcosta 20bf1d2c20 He añadido al visor de muestras el plot de IC. 2022-04-04 17:30:55 +02:00
marcelcosta a5581182c2 Añadir al visor de muestras el plot de poblaciones. 2022-04-04 17:15:12 +02:00
marcelcosta ab1684651e Completado procesado de datos de Checkpoint Inhibitors. 2022-04-04 17:14:42 +02:00
marcelcosta 67ba4921ca Añadir sección de citometría para tinciones de Poblaciones. 2022-04-04 15:40:54 +02:00
marcelcosta db6c07595c Cambiar etiquetas. 2022-04-04 11:37:56 +02:00
marcelcosta 35e4d31495 Iniciar sección citometría. Botón para el directorio. 2022-04-04 11:35:23 +02:00
marcelcosta 38aa06c4ee Añadir etiquetas para el código. 2022-04-04 11:34:43 +02:00
marcelcosta 38e902cef0 Merge branch 'dev' 2022-04-04 10:53:51 +02:00
marcelcosta 3492b7f7ef Corregir año en la fecha de tabla clinics 2022-04-01 12:26:42 +02:00
marcelcosta 44901be490 Corregir año en la fecha de tabla clinics 2022-04-01 12:26:04 +02:00
marcelcosta 3c8a69b21c Merge branch 'main' into dev 2022-04-01 12:21:02 +02:00
Costa 9b8f24ddd8 Corregir formato en las fechas de la plantilla CLINICS. 2022-03-31 14:18:46 +02:00
Costa ea45d8c845 merge with nitro 2022-03-31 13:40:47 +02:00
Costa 134133498b Corregir carga librerías para merge 2022-03-29 12:24:11 +02:00
Costa c9d09c44a2 Cambio de "Sincronizar" a "Actualizar" nitrógeno. 2022-03-28 14:52:42 +02:00
Costa b12ae3fd5f Introducción de un botón para actualizar nitrógeno. 2022-03-28 14:52:04 +02:00
Costa 2909f49eec Añadido plot para expresión de genes. 2022-03-28 12:49:29 +02:00
Costa b14fddf8fe Visor scRNAseq. 2022-03-22 16:29:04 +01:00
Costa 5bbd25c64d Empezar visor scRNAseq. 2022-03-22 14:26:33 +01:00
Costa 5ea3b493f4 Añadir la sincronización de tablas para CC. 2022-03-22 14:25:17 +01:00
Costa ffdf64d736 Añadir cancer de cólon. 2022-03-17 17:15:54 +01:00
Costa af5eee3a33 Relleno del visor - fase I 2022-03-17 16:21:24 +01:00
Costa 6cdde0282a Creación de una división por paneles. 2022-03-15 11:38:41 +01:00
Costa f4c6fae34a Cambio en el formato de definir las rutas. 2022-03-04 17:46:56 +01:00
Costa a8ca15592e Corrección de la función de importar NHC de excel. 2022-03-04 17:46:37 +01:00
Costa 022a222ddf Soporte para base de datos OVID. 2022-03-04 14:56:19 +01:00
Costa 5762efa5e4 Consistencia en sqlGenOVID. 2022-03-03 19:09:29 +01:00
Costa df0e5d4985 Añadir espacio 2022-03-02 14:10:39 +01:00
Costa b968de1fb1 Añadir aplicación shiny 2022-03-02 14:01:05 +01:00
Costa 52f5ad865d Poder cambiar la ruta de la función sqlInitialize. 2022-03-02 14:00:12 +01:00
Costa 72f89330e6 Machacar plantilla. 2022-03-01 14:43:47 +01:00
Costa 109acff436 Generar tabla vacía cuando no haya CNAG y RNA. 2022-03-01 14:43:25 +01:00
Costa 76fa2fc0b1 No machacar la columna Samples de la pestaña NHC de la plantilla. 2022-03-01 14:35:34 +01:00
Costa f4f4e6a350 Añadir soporte para asignar CNAG y RNADNA. También para incluir automaticamente la fecha. 2022-03-01 14:26:15 +01:00
del Carpio Huerta e948b086ed Quitar un Id. 2022-03-01 13:03:42 +01:00
del Carpio Huerta ea01f18d16 Solucionar problemas en la modificación y entrada de nuevos elementos de la tabla CLINICOS. 2022-02-28 16:06:49 +01:00
del Carpio Huerta 1be48b44fb Mejorar el escriturado de la pestaña nhc de la plantilla. 2022-02-28 16:06:22 +01:00
del Carpio Huerta 766fe1f4d4 Error en la función de llenar la plantilla. 2022-02-28 16:05:48 +01:00
del Carpio Huerta 34b54230cb Solucionar otro problema de duplicado. 2022-02-28 16:05:06 +01:00
del Carpio Huerta 2e4f3416e6 Solucionar error cuando el NHC está duplicado. 2022-02-28 16:04:36 +01:00
Costa 1613207bf6 Corregir función sqlBackup. 2022-01-27 15:04:13 +01:00
Costa 4ba729e6c6 Correction of conflicts for merging UM to main.
Merge branch 'UM'

# Conflicts:
#	workflow.R
2022-01-24 15:24:59 +01:00
Costa f2f8f12855 Correct workflow to merge.
Merge branch 'main' of https://git.ratg.cat/marcelcosta/BDAccess

# Conflicts:
#	workflow.R
2022-01-24 15:20:56 +01:00
Marin Jimenez d9e8117b83 Cambio de orden en funciones inciales 2021-11-17 16:04:43 +01:00
6 changed files with 1767 additions and 64 deletions
+1431
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -128,7 +128,7 @@ sqlBackUp()
```r ```r
sqlBackUp<-function(dbfile=file,conn=dta,bu.dir=NULL){ sqlBackUp<-function(dbfile=file,conn=dta,bu.dir=NULL){
if(sqlTables(conn) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){bu.dir<-"BU_UM"} if(sqlTables(conn) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){bu.dir<-"BU_UM"}
if(sqlTables(conn) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){dbtype<-"BU_OVARIO"} if(sqlTables(conn) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){bu.dir<-"BU_OVARIO"}
db=strsplit(dbfile, "/")[[1]]%>% tail(n=1) db=strsplit(dbfile, "/")[[1]]%>% tail(n=1)
bu_path<-gsub(db,bu.dir,dbfile) bu_path<-gsub(db,bu.dir,dbfile)
+1 -1
View File
@@ -126,7 +126,7 @@ sqlBackUp()
```r ```r
sqlBackUp<-function(dbfile=file,conn=dta,bu.dir=NULL){ sqlBackUp<-function(dbfile=file,conn=dta,bu.dir=NULL){
if(sqlTables(conn) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){bu.dir<-"BU_UM"} if(sqlTables(conn) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){bu.dir<-"BU_UM"}
if(sqlTables(conn) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){dbtype<-"BU_OVARIO"} if(sqlTables(conn) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){bu.dir<-"BU_OVARIO"}
db=strsplit(dbfile, "/")[[1]]%>% tail(n=1) db=strsplit(dbfile, "/")[[1]]%>% tail(n=1)
bu_path<-gsub(db,bu.dir,dbfile) bu_path<-gsub(db,bu.dir,dbfile)
File diff suppressed because one or more lines are too long
+4 -1
View File
@@ -1 +1,4 @@
file<-"C:/Users/47926492N/OneDrive - IDIBELL - Institut d'Investigació Biomèdica de Bellvitge/RATG-PIULATS/OVARIO.accdb" # file<-"C:/Users/47926492N/OneDrive - IDIBELL - Institut d'Investigació Biomèdica de Bellvitge/RATG-PIULATS/MELANOMA UVEAL CIT.accdb"
# file<-"C:/Users/47926492N/OneDrive - IDIBELL - Institut d'Investigació Biomèdica de Bellvitge/RATG-PIULATS/OVARIO.accdb"
UMfile<-file<-"C:/Users/47926492N/Documents/Test/MELANOMA UVEAL CIT.accdb"
OVfile<-file<-"C:/Users/47926492N/Documents/Test/OVARIO.accdb"
+58 -20
View File
@@ -13,18 +13,19 @@ sqlLastDrop<-function(conn, tablename, droplast=1,dbtype=NULL){
sqlSave(conn, table, tablename = tablename, safer = F)} sqlSave(conn, table, tablename = tablename, safer = F)}
} }
sqlInitialize<-function(){
sqlInitialize<-function(ruta="ruta_database.R"){
library(tidyverse) library(tidyverse)
library(RODBC) library(RODBC)
library(openxlsx) library(openxlsx)
## Conexión a la base de datos ## Conexión a la base de datos
source("ruta_database.R", encoding = "UTF-8") source(ruta, encoding = "UTF-8")
} }
sqlBackUp<-function(dbfile=file,conn=dta,bu.dir=NULL){ sqlBackUp<-function(dbfile=file,conn=dta,bu.dir=NULL){
if(sqlTables(conn) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){bu.dir<-"BU_UM"} if(sqlTables(conn) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){bu.dir<-"BU_UM"}
if(sqlTables(conn) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){dbtype<-"BU_OVARIO"} if(sqlTables(conn) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){bu.dir<-"BU_OVARIO"}
db=strsplit(dbfile, "/")[[1]]%>% tail(n=1) db=strsplit(dbfile, "/")[[1]]%>% tail(n=1)
bu_path<-gsub(db,bu.dir,dbfile) bu_path<-gsub(db,bu.dir,dbfile)
@@ -54,36 +55,46 @@ sqlShowSamples<-function(conn=dta, nhcs=nhc.test, verb=F, dbtype=NULL){
if (isFALSE(verb)){ if (isFALSE(verb)){
sqlQuery(conn, query) %>% filter(NHC %in% nhcs) %>% sqlQuery(conn, query) %>% filter(NHC %in% nhcs) %>%
group_by(NHC,UQ(rlang::sym(db["dbcode"]))) %>% summarise(Samples=length(UQ(rlang::sym(db["dbsamples"]))), Names=paste0(UQ(rlang::sym(db["dbsamples"])), collapse = ";")) %>% group_by(NHC,UQ(rlang::sym(db["dbcode"]))) %>% summarise(Samples=length(UQ(rlang::sym(db["dbsamples"]))), Names=paste0(UQ(rlang::sym(db["dbsamples"])), collapse = ";")) %>%
merge(data.frame(NHC=nhcs),all=T) %>% mutate(NHC=factor(NHC,levels = nhcs)) %>% arrange(NHC) merge(data.frame(NHC=nhcs),all=T) %>% mutate(NHC=factor(NHC,levels = unique(nhcs))) %>% arrange(NHC)
}else{ }else{
sqlQuery(conn, query) %>% filter(NHC %in% nhcs) sqlQuery(conn, query) %>% filter(NHC %in% nhcs)
} }
} }
sqlGenOVID<-function(conn=dta, nhcs=nhc.test, verb=T, sinc=F, dbtype=NULL){ sqlGenOVID<-function(conn=dta, nhcs=nhc.test, verb=T, sinc=F, dbtype=NULL){
if(sqlTables(dta) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){dbtype<-"UM"} if(sqlTables(conn) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){dbtype<-"UM"}
if(sqlTables(dta) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){dbtype<-"OV"} if(sqlTables(conn) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){dbtype<-"OV"}
if (dbtype == "OV"){ if (dbtype == "OV"){
db<-c("dbcode"="OVID") db<-c("dbcode"="OVID", "dbpref"="OVID")
} }
if (dbtype == "UM"){ if (dbtype == "UM"){
db<-c("dbcode"="UMID") db<-c("dbcode"="UMID","dbpref"="UMID")
}
if (dbtype == "CC"){
db<-c("dbcode"="PATID", "dbpref"="CCID")
} }
dbid<-sqlFetch(conn,db["dbcode"]) dbid<-sqlFetch(conn,db["dbcode"])
new.nhc<-nhcs[!nhcs %in% dbid$NHC] %>% unique()
new.nhc<-nhcs[!nhcs %in% dbid$NHC]
if(length(new.nhc) > 0){ if(length(new.nhc) > 0){
if (nrow(dbid) == 0){next.num<-1}else{
next.num<-gsub(db["dbcode"],"",dbid[,db["dbcode"]]) %>% as.numeric %>% max(na.rm=T)+1 next.num<-gsub(db["dbcode"],"",dbid[,db["dbcode"]]) %>% as.numeric %>% max(na.rm=T)+1
}
print(next.num)
last.num<-next.num+(length(new.nhc)-1) last.num<-next.num+(length(new.nhc)-1)
newtab<-data.frame("NHC"=new.nhc, "ID"=sprintf("%s%04d",db["dbcode"],next.num:last.num)) %>% rename(!!db["dbcode"]:="ID") newtab<-data.frame("NHC"=new.nhc, "ID"=sprintf("%s%04d",db["dbpref"],next.num:last.num)) %>% rename(!!db["dbcode"]:="ID")
if(dbtype=="OV"){ if(dbtype=="OV"){
dbid<-rbind(dbid,newtab) dbid<-rbind(dbid,newtab)
} }
if(dbtype=="UM"){ if(dbtype=="UM"){
dbid<-merge(dbid, newtab, all=T) %>% select(Id,NHC,UMID) %>% arrange(Id) dbid<-merge(dbid, newtab, all=T) %>% select(NHC,UMID) %>% arrange(UMID)
dbid$Id<-as.numeric(rownames(dbid)) # dbid$Id<-as.numeric(rownames(dbid))
dbid$NHC<-as.numeric(dbid$NHC)
}
if (dbtype=="CC"){
dbid<-merge(dbid, newtab, all=T) %>% select(NHC,PATID) %>% arrange(PATID)
dbid$NHC<-as.numeric(dbid$NHC) dbid$NHC<-as.numeric(dbid$NHC)
} }
rownames(dbid)<-as.character(1:nrow(dbid)) rownames(dbid)<-as.character(1:nrow(dbid))
@@ -91,7 +102,7 @@ sqlGenOVID<-function(conn=dta, nhcs=nhc.test, verb=T, sinc=F, dbtype=NULL){
if (sinc){ if (sinc){
### !! Atención, esto cambia la base de datos: ### !! Atención, esto cambia la base de datos:
sqlSave(conn, dbid, tablename=db["dbcode"], append = T) sqlSave(conn, dbid, tablename=db["dbcode"], append = T, rownames = F)
print("La base ha sido actualizada.") print("La base ha sido actualizada.")
} }
if (verb){ if (verb){
@@ -102,7 +113,7 @@ sqlGenOVID<-function(conn=dta, nhcs=nhc.test, verb=T, sinc=F, dbtype=NULL){
} }
} }
sqlWriteTemp<-function(conn=dta, nhcs=nhc.test, file="queryOV.xlsx", samples.mod=T, clinics.mod=T, dbtype=NULL){ sqlWriteTemp<-function(conn=dta, nhcs=nhc.test, file="queryOV.xlsx", samples.mod=T, clinics.mod=T, dbtype=NULL, today=F){
if(sqlTables(dta) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){dbtype<-"UM"} if(sqlTables(dta) %>% filter(TABLE_NAME == "UMID") %>% nrow > 0){dbtype<-"UM"}
if(sqlTables(dta) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){dbtype<-"OV"} if(sqlTables(dta) %>% filter(TABLE_NAME == "OVID") %>% nrow > 0){dbtype<-"OV"}
@@ -150,24 +161,51 @@ sqlWriteTemp<-function(conn=dta, nhcs=nhc.test, file="queryOV.xlsx", samples.mod
} }
last.samp<-next.samp+(length(nhcs)-1) last.samp<-next.samp+(length(nhcs)-1)
new.samp<-sprintf("UM%s%02d",Sys.time() %>% format("%y"),next.samp:last.samp) new.samp<-sprintf("UM%s%02d",Sys.time() %>% format("%y"),next.samp:last.samp)
new.samp.df<-merge(sqlFetch(dta,"UMID") %>% merge(data.frame("NHC"=nhcs)), data.frame("NHC"=nhcs, "CODIGO"=new.samp)) new.samp.df<-data.frame("NHC"=nhcs, "CODIGO"=new.samp) %>% merge(sqlFetch(dta,"UMID"), all.x=T) %>% arrange(CODIGO)
samples.exp<-merge(samples %>% slice(0), new.samp.df %>% select(-NHC), all=T) %>% select(colnames(samples)) %>% arrange(CODIGO) samples.exp<-merge(samples %>% slice(0), new.samp.df %>% select(-NHC), all=T) %>% select(colnames(samples)) %>% arrange(CODIGO)
if (today==TRUE){
samples.exp$FECHA_RECEPCION<-format(Sys.Date(), "%d/%m/%y")
}
} }
nhc.table<-read.xlsx(file, sheet = "NHC")
if (any(sapply(nhc.table$Samples, function(x) "cnag" %in% strsplit(x,",")[[1]]) == T)){
nhcs.cnag<-nhc.table[sapply(nhc.table$Samples, function(x) "cnag" %in% strsplit(x,",")[[1]]),"NHC"]
umid.cnag<-sqlFetch(conn, "UMID") %>% filter(NHC %in% nhcs.cnag) %>% pull(UMID)
sample.cnag<-samples.exp %>% filter(UMID %in% umid.cnag) %>% pull(CODIGO)
cnag.exp<-merge(data.frame("UMID"=umid.cnag, "CODIGO"=sample.cnag), sqlFetch(dta, "CNAG") %>% slice(0), all=T)
if (today==TRUE){
cnag.exp$FECHA_ENVIO<-format(Sys.Date(), "%d/%m/%y")
}
}else{cnag.exp<-sqlFetch(dta, "CNAG") %>% slice(0)}
if (any(sapply(nhc.table$Samples, function(x) "rna" %in% strsplit(x,",")[[1]]) == T)){
nhcs.rna<-nhc.table[sapply(nhc.table$Samples, function(x) "rna" %in% strsplit(x,",")[[1]]),"NHC"]
umid.rna<-sqlFetch(conn, "UMID") %>% filter(NHC %in% nhcs.rna) %>% pull(UMID)
sample.rna<-samples.exp %>% filter(UMID %in% umid.rna) %>% pull(CODIGO)
rna.exp<-merge(data.frame("UMID"=umid.rna, "CODIGO"=sample.rna), sqlFetch(dta, "RNADNA") %>% slice(0), all=T)
}else{rna.exp<- sqlFetch(dta, "RNADNA") %>% slice(0)}
if (clinics.mod){ if (clinics.mod){
## Importar los datos clínicos de pacientes existentes y generar nueva entrada par los nuevos ## Importar los datos clínicos de pacientes existentes y generar nueva entrada par los nuevos
upd.clinics<-sqlFetch(conn, "CLINICOS") upd.clinics<-sqlFetch(conn, "CLINICOS")
umid.new<-sqlFetch(conn, "UMID") %>% filter(NHC %in% nhcs) umid.new<-sqlFetch(conn, "UMID") %>% filter(NHC %in% nhcs)
upd.clinics<-merge(umid.new,upd.clinics %>% select(-Id), all.x=T, by="UMID") upd.clinics<-merge(umid.new,upd.clinics, all.x=T, by="UMID")
upd.clinics$NHC<-as.character(upd.clinics$NHC) upd.clinics$NHC<-as.character(upd.clinics$NHC)
for (i in colnames(upd.clinics)[sapply(upd.clinics, lubridate::is.POSIXct)]){upd.clinics[,i]<-as.Date(upd.clinics[,i])} for (i in colnames(upd.clinics)[sapply(upd.clinics, lubridate::is.POSIXct)]){upd.clinics[,i]<-as.Date(upd.clinics[,i])}
} }
## Exportar tablas a la plantilla de entrada para su rellenado ## Exportar tablas a la plantilla de entrada para su rellenado
wb <- loadWorkbook(file) wb <- createWorkbook(file)
writeData(wb, "NHC", upd.umid) addWorksheet(wb, "NHC")
addWorksheet(wb, "samples")
addWorksheet(wb, "CLINICS")
addWorksheet(wb, "CNAG")
addWorksheet(wb, "RNADNA")
writeData(wb, "NHC", merge(nhc.table, upd.umid, sort = F))
if (samples.mod){writeData(wb,"samples",samples.exp)} if (samples.mod){writeData(wb,"samples",samples.exp)}
if (clinics.mod){writeData(wb,"CLINICS",upd.clinics)} if (clinics.mod){writeData(wb,"CLINICS",upd.clinics)}
writeData(wb,"CNAG",cnag.exp)
writeData(wb,"RNADNA",rna.exp)
saveWorkbook(wb,file,overwrite = TRUE) saveWorkbook(wb,file,overwrite = TRUE)
} }
} }
@@ -238,7 +276,7 @@ sqlSincBD<-function(conn=dta, filetemp="queryOV.xlsx", sinc.samples=F, sinc.clin
for (i in fechas){ for (i in fechas){
clinics.mod[,i]<-as.Date(clinics.mod[,i]) clinics.mod[,i]<-as.Date(clinics.mod[,i])
} }
sqlUpdate(conn, clinics.mod,"CLINICOS") sqlUpdate(conn, clinics.mod,"CLINICOS", index="UMID")
print("Tabla CLINICOS modificada.") print("Tabla CLINICOS modificada.")
} }
} }
@@ -276,7 +314,7 @@ sqlSincBD<-function(conn=dta, filetemp="queryOV.xlsx", sinc.samples=F, sinc.clin
for (i in fechas){ for (i in fechas){
clinics.new[,i]<-as.Date(clinics.new[,i]) clinics.new[,i]<-as.Date(clinics.new[,i])
} }
sqlSave(conn, clinics.new, tablename="CLINICOS", append = T, varTypes = varTypes) sqlSave(conn, clinics.new, tablename="CLINICOS", append = T, varTypes = varTypes, rownames = F)
print("Tabla CLINICOS sincronizada.") print("Tabla CLINICOS sincronizada.")
} }
} }