Eliminar todos los datos almacenados en tablas de forma masiva

Que me interesa saber cómo puedo eliminar todos los datos de la Bb de forma masiva.

La idea es hacer una copia de la aplicación y borrarle todos los datos para ser utilizarla otro ordenador independiente.

¿Alguna sugerencia?

1 Respuesta

Respuesta
1

Con:

CurrentDb. Execute "DELETE * FROM NombreTabla" 

borras todos los registros de la tabla NombreTabla

Si quieres borrar los datos de todas las tablas (menos las de sistema, obviamente), puedes hacerlo con:

Dim tbl As TableDef
For Each tbl In CurrentDb.TableDefs
    If tbl.Name Not LIKE "MSys*" OR tbl.Name Not LIKE "USys*" Then
        CurrentDb.Execute "DELETE * FROM " & tbl.Name
    End If
Next

La idea es borrar los datos de todas las tablas, (menos las de sistema), Para ello he puesto el código en el evento "al hacer click" de un botón de comando, pero al ejecutarlo hay algo que falla, parece ser que el sistema  no reconoce el if

O yo no lo he hecho bien.

Se me ocurre, "y no tengo ni idea de si es posible hacerlo o no",  que lo ideal sería crear una tabla con dos campos, uno tipo texto para  los nombres de tablas y otro  de tipo boolean con la opción de marcar todas o solo aquellas que defina el usuario. Y para evitar accidentes, o mal uso intencionado, proteger la ejecución del código de eliminación de datos mediante mensajes de advertencia del tipo msgbox, y/o con contraseña.

No se, ahí te lo dejo.

Por favor, dame tu opinión al respecto. Y si es viable esta ocurrencia mia. GRACIAS

Disculpa, el código tiene un fallo porque lo escribí pensando en una SQL (... Campo not Like...), mientras que en VBA lo correcto sería "Not algo like..":

Dim tbl As TableDef
For Each tbl In CurrentDb.TableDefs
    If Not tbl.Name Like "MSys*" And Not tbl.Name Like "USys*" Then
        CurrentDb.Execute "DELETE * FROM [" & tbl.Name & "]"
    End If
Next

Te añado los corchetes por si se diera el caso de que alguna de tus tablas tenga algún espacio en blanco, para que no te de error.

Lo de la tabla con los dos campos es factible hacerlo. Suponiendo que la tabla se llame TABorrar, con los campos NombreTabla y Borrar (de tipo Sí/no), el proceso podría ser:

Dim rst As DAO.Recordset
Set rst=CurrentDb.Openrecordset("SELECT NombreTabla FROM TABorrar WHERE Borrar=-1")
If rst.Recordcount>0 Then
rst.MoveFirst
Do until rst.EOF
CurrentDb.Execute "Delete * FROM [" & rst(0) & "]"
rst.MoveNext
Loop
End If
rst.close
Set rst=Nothing

¡Gracias! Amigo, lo He montado con la tabla y funciona perfectamente, y es más seguro que con la primera opción, que lo borra todo. Lo he adaptado a mis necesidades y cumple perfectamente.- Gracias de nuevo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas