** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Borrar copias seguridad
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoBorrar copias seguridad

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2297
Enlace directo a este mensaje Tema: Borrar copias seguridad
    Enviado: 23/Noviembre/2017 a las 18:37
Buanas!!

Ya tengo diseñado un sistema de copias de seguridad y me funciona bien. Ahora queria pulirlo un poco. Lo que quiero es que en la carpeta donde se guardan las copias se guarden las ultimas 5 copias por ejemplo, por decir algo, si no al final habria un monton de copias, se hara una cada dia aproximadamente.
El archivo lleva este nombre y le pongo la fecha de cuando se ha hechp
CopiaSeguridad_26-10-2017.rar

No se como plantearlo, quizas mirando la fecha de creacion del archivo, pero no se como buscar eso en todos los archivos. O crearme una tabla donde se guarde el nombre del archivo y la fecha de la copia y a los x dias borrarlos...

A ver si me dais alguna sugerencia, la mas sencilla, que no soy precisamente un manitas con vba, me defiendo lo justo..

Saludos
Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4411
Enlace directo a este mensaje Enviado: 23/Noviembre/2017 a las 19:32
Mira la instrucción FileDateTime en la ayuda ....

https://msdn.microsoft.com/es-es/library/13xy179k(v=vs.90).aspx
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1061
Enlace directo a este mensaje Enviado: 23/Noviembre/2017 a las 19:36
Hola rokoko
Además de lo que te indica javier,
Tal como lo tienes planteado, lo que te puedo ofrecer es esta pequeña funcion

Public Function TextoentreChar(scadena As String, Char1 As String, Char2 As String) As String
Dim x As Long, Y As Long
If scadena = "" Then TextoentreChar = "": Exit Function
If InStr(scadena, Char1) > 0 And InStr(scadena, Char2) > 0 Then
    x = InStr(scadena, Char1) + 1
    Y = InStrRev(scadena, Char2)
    TextoentreChar = Mid(scadena, x, Y - x)
End If
End Function
Devuelve el texto que hay entre dos caracteres

Ejemplo:
TextoentreChar("CopiaSeguridad_26-10-2017.rar", "_",".")
seria igual a "26-10-2017"
y ahora a jugar con los archivos con fecha menor a la deseada
Saludos





Editado por main - 23/Noviembre/2017 a las 19:38
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1140
Enlace directo a este mensaje Enviado: 23/Noviembre/2017 a las 20:00
No sé cuán grande es el archivo rar, pero un disco duro externo (o lápiz usb), cambiarlo cada vez que se llene, o dejar al usuario que elimine las copias según otras necesidades (tamaño, fechas, posibles "gambadas" de alguien, ...) es otra posibilidad.
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1964
Enlace directo a este mensaje Enviado: 24/Noviembre/2017 a las 19:50
Hola,

Yo tengo las rutas de las copias en una tabla y tengo un pequeño formulario donde mediante un cuadro de lista muestro todas las copias, y con dos botones uno para restaurar la copia y otro para eliminarla, en este en concreto tengo este código que puedes adaptarlo como creas.


Private Sub cmdEliminaRuta_Click()
    Dim cadena As String
    Dim Posicion As String
    Dim longitud As String
    Dim strBorrar As String
    'calculamos la longitud de la ruta
    longitud = Len(Me.lstRutaCopias.Column(1))
    'damos vuelta a la cadena de texto
    cadena = StrReverse(Me.lstRutaCopias.Column(1))
    'buscames el primer \ que sera el ultimo en la ruta
    Posicion = InStr(cadena, "\")
    'extraemos la ruta menos la ultima carpeta
    cadena = Left(Me.lstRutaCopias.Column(1), longitud - Posicion)
    'cambiamos la ruta del ddir
    strBorrar = cadena
    Open CurrentProject.Path & "\EliminarCopia.bat" For Output As #1
    Print #1, "rd /s /q " & strBorrar
    Close #1
    Ejecuta Me.hWnd, "open", _
            CurrentProject.Path & "\EliminarCopia.bat", "", "", 1
    DoCmd.SetWarnings False
    DoCmd.RunSQL "delete * from tblCopias where [Id]=" & Me.lstRutaCopias.Column(0) & ""
    DoCmd.SetWarnings True
    Me.lstRutaCopias.Requery
    If Me.lstRutaCopias.ListCount = 0 Then
    Me.cmdCierraRestaura.SetFocus
    Me.cmdRestaurar.Enabled = False
    Me.cmdEliminaRuta.Enabled = False
    End If


End Sub


Tanto la copia como la eliminación lo hago mediante un archivo .bat creo que me da más juego, pero es algo personal.


Saludos, ximo
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2297
Enlace directo a este mensaje Enviado: 24/Noviembre/2017 a las 20:34
Buenas.

Muchas gracias por vuestra ayuda.
De momento lo he planteado asi, y las pruebas salen bien. Aun lo probare mas....

1-Guardo en una tabla la fecha y el nombre de la copia seguridad cada vez que se hace una.
2-Con una consulta en sql verifico si hay copias X dias ates de la fecha actual, si hay procedo a borrarlas a traves de un recordset  y un bucle que va pillando cada registro de la tabla que esta X dias por debajo de la fecha actual.
Verifico tambien si existe el archivo comparandolo con el nombre de la tabla
3. Y por ultimo borro de la tabla los registros de los archivos que se han borrado.
Aqui el codigo para os hagais una idea.. y me deis alguna sugerencia para mejorarlo o no...

Saludos

'----------------------------------------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------------------------------------------
'Bloque de codigo que nos guarda el nombre de la copia y la fecha en la tabla tbBorrarCopiasSeguridad
'Para asi luego poder eliminar las copias de seguridad x dias desde la fecha actual, para que no se nos acumulen y gasten espacio en disco

'Anexamos datos a la tabla

DoCmd.SetWarnings False

Dim stSQL As String
Dim varNombreCopia As Variant
varNombreCopia = varNombreArchivoRAR & "" & varFecha & ".rar"

stSQL = ""

stSQL = stSQL & "INSERT INTO tbBorrarCopiasSeguridad "
stSQL = stSQL & "    ( NombreCopia, FechaCopia ) "
stSQL = stSQL & " SELECT " & Chr(34) & "" & varNombreCopia & "" & Chr(34) & " AS NombreCopia, "
stSQL = stSQL & "    Date() AS Fecha;  "

DoCmd.RunSQL stSQL

DoCmd.SetWarnings True

'fin anexion


'Inicio bucle borrado de archivos copia seguridad antiguos
Dim rst As DAO.Recordset
    
    
                                                                                                                                                   'Agrupamos para que solo nos muestre una copia x fecha
    Set rst = CurrentDb.OpenRecordset("SELECT tbBorrarCopiasSeguridad.NombreCopia, tbBorrarCopiasSeguridad.FechaCopia From tbBorrarCopiasSeguridad GROUP BY tbBorrarCopiasSeguridad.NombreCopia, tbBorrarCopiasSeguridad.FechaCopia HAVING (((tbBorrarCopiasSeguridad.FechaCopia)<Date()-60));")  '<Date()-60)El numero es los dias que queremos descontar a la fecha actual
    
    'De esta forma puede ocuurir que si en por ejemplo 15 dias no se hace copia, el dia que se haga y se ejecute esta funcion, nos podemos encontrar con que borre todas las copias ya que son anteriores a la fecha actual -7 dias,
    'podemos poner 90 dias por ejemplo, habra un montosn de copias, pero nos aseguramos que no se borran todas, malo sea que en 90 dias no se use el programa.
    
    'Aqui verificamos si la consulta del recordset anterior tiene registros.
If rst.RecordCount = 0 Then  ' Si no hay registros nos avisa de que no hay nada que borrar
'MsgBox "No hay copias de seguridad que borrar."

Else

'En este bucle borrara tantos archivos como bucles realize
While rst.EOF = False    'Abre el bucle, mientras sea False se ejecuta???Cuando en el recordset no hay registros sera True y saldra del bucle??

'MsgBox " " & rst("NombreCopia") & " "  'ATENCION OK Esto es para probar(ver) los archivos rar que hay para borrar


   
   'Dim varDestinoCopiaRAR As String
   Dim varDestinoCopiaRARcompleto2 As String
   'varDestinoCopiaRAR = DLookup("RutaCopiaSeguridad", "tbCopiaSeguridad", "Orden=1")
   varDestinoCopiaRARcompleto2 = varDestinoCopiaRAR & "\" & rst("NombreCopia") ' & "" & varFecha
   'MsgBox varDestinoCopiaRARcompleto
   
   
   
   'COMPROBAMOS SI EXISTE ARCHIVO, si no esta no hace nada y sigue el bucle, si esta lo borra y sigue el bucle.
   'Borramos rar copia seguridad
    If Len(Dir(varDestinoCopiaRARcompleto2, vbArchive)) = 0 Then
    'MsgBox "No existe el archivo para borrar."
    Else
    Kill varDestinoCopiaRARcompleto2
    End If
   
   
   
   
   
   
   
  
'Bloque codigo que borra registros de tbBorrarCopiasSeguridad en los que se a borrado el archivo justo arriba
   
'Código generado por jbwzSQL2VBA a partir de la consulta "00qryBorrarRegistrosDe_tbBorrarCiopiaSeguridad".


DoCmd.SetWarnings False

Dim stSQL2 As String


'rst("NombreCopia") = _____________ ' Texto   (Sustituye a CopiaSeguridadAmbulancia_21-11-2017.rar )


stSQL2 = ""

stSQL2 = stSQL2 & " DELETE tbBorrarCopiasSeguridad.Id, "
stSQL2 = stSQL2 & "    tbBorrarCopiasSeguridad.NombreCopia, "
stSQL2 = stSQL2 & "    tbBorrarCopiasSeguridad.FechaCopia"
stSQL2 = stSQL2 & " FROM tbBorrarCopiasSeguridad"
stSQL2 = stSQL2 & " WHERE (((tbBorrarCopiasSeguridad.NombreCopia)=" & Chr(34) & "" & rst("NombreCopia") & "" & Chr(34) & ")); "
   
DoCmd.RunSQL stSQL2


DoCmd.SetWarnings True



rst.MoveNext
Wend
rst.Close
Set rst = Nothing




'MsgBox "Copias seguridad antiguas eliminadas."



End If
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1140
Enlace directo a este mensaje Enviado: 25/Noviembre/2017 a las 17:58
Yo agregaría la posibilidad de que si hay n copias, y con los 60 días se borran las n copias porque no han hecho más, que deje alguna sin borrar, por si acaso.
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1964
Enlace directo a este mensaje Enviado: 25/Noviembre/2017 a las 23:32
Hola,

Pues sigo opinando que lo mejor para no tener un susto es como el correo de gmail, una casilla los selecciona todos, se deseleccionan los 5 que nos interesan y los demás a la basura, pero siempre manual, lo veo más seguro Wink

Saludos, ximo
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3291
Enlace directo a este mensaje Enviado: 26/Noviembre/2017 a las 10:30
Hola.
Una alternativa no tan precisa(sí se hacen cópias casi diarias) , pero sí mas corta sería nombrando los ficheros como:
"copiadeseguridad_" & format(date,"dd") & ".rar" que haría un máximo de 31 ficheros y después se automachacarían
o
"copiadeseguridad_" & Weekday(Date) & ".rar" que haría hasta 7 incluidos sábados y domingos y lo mismo que lo anterior
Después ordenando la carpeta por fecha de creación tendríamos las últimas copias al principio o al final con esa fecha de creación

Espero que sea de utilidad.
Ya comentas.
Un saludo a todos
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2297
Enlace directo a este mensaje Enviado: 26/Noviembre/2017 a las 20:56
Publicado originalmente por prga prga escribió:

Hola.
Una alternativa no tan precisa(sí se hacen cópias casi diarias) , pero sí mas corta sería nombrando los ficheros como:
"copiadeseguridad_" & format(date,"dd") & ".rar" que haría un máximo de 31 ficheros y después se....


A ver si esta semana tengo tiempo de probar vuestras sugerencias, esta de prga me a parecido de lo mas sencilla y efectiva...

Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2297
Enlace directo a este mensaje Enviado: 28/Noviembre/2017 a las 19:35
Con las ideas que me habeis ofrecido aqui y lo que tengo hecho yo, creo que se puede armar un buen sistema de copias.
A la idea de prga para pulirla se puede hacer que la carpeta que va dentro del rar si que tengan la fecha completa, de esta forma no hay dudas de cuando es la copia

Se puede cerrar

Saludos
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable