2009-03-26 22 views

Respuesta

16

¿Por qué no mantener a mano una copia vacía de la base de datos? Al final del mes, guarde la base de datos existente, luego copie la base de datos vacía en su lugar.

+0

Esto también significa que usted hace No es necesario compactar y reparar. – Fionnuala

+0

Gran respuesta. Muy pragmático – JohnFx

+0

Y luego tiene que replicar las correcciones o mejoras en la base de datos vacía. He estado haciendo eso por un tiempo, pero es muy propenso a errores, por no decir tedioso. Voy a probar las otras soluciones. – mvbentes

0

Dado que esta es una acción repetitiva, sería mejor si realizara una secuencia de comandos SQL simple para hacer esto.

DELETE FROM <table1>; 
DELETE FROM <table2>; 
... 
DELETE FROM <tablen>; 
+3

MS-access no permite tener más de una consulta DELETE en el script. –

11

La respuesta de Craig es simple y sensata. Si realmente desea una solución programática, la siguiente secuencia de comandos de VBA borrará todos los datos de todas las tablas, excluidas las ocultas. Requiere DAO para estar habilitado - en el Editor de Visual Basic, vaya a Herramientas -> Referencias, y marque Microsoft DAO 3.6 Object Library, a continuación, en Aceptar:

Public Sub TruncateTables() 
'Majority of code taken from a data dictionary script I can no longer source nor find the author 

On Error GoTo Error_TruncateTables 

Dim DB As DAO.Database 
Dim TDF As DAO.TableDef 
Dim strSQL_DELETE As String 

Set DB = CurrentDb() 

    For Each TDF In DB.TableDefs 
     If Left(TDF.Name, 4) <> "MSys" Then 
      strSQL_DELETE = "DELETE FROM " & TDF.Name & ";" 
      DB.Execute strSQL_DELETE 
     End If 
    Next 

MsgBox "Tables have been truncated", vbInformation, "TABLES TRUNCATED" 
DB.Close 

Exit_Error_TruncateTables: 
    Set TDF = Nothing 
    Set DB = Nothing 
    Exit Sub 

Error_TruncateTables: 
    Select Case Err.Number 
     Case 3376 
      Resume Next 'Ignore error if table not found 
     Case 3270 'Property Not Found 
      Resume Next 
     Case Else 
      MsgBox Err.Number & ": " & Err.Description 
      Resume Exit_Error_TruncateTables 
    End Select 
End Sub 
0

Resalte todas las filas y luego pulse la tecla Supr del teclado. Si el acceso está haciendo esa cosa, no te permite ir al fondo, luego ve a una celda y presiona ctrl + flecha abajo. Para resaltar todas las filas, resalte la fila superior y luego desplácese a la fila inferior y mantenga presionada la tecla shift mientras selecciona la fila inferior. Todas las filas deben estar resaltadas.

8

Gran respuesta de Alistair, aunque debe actualizarse. La antigua instrucción if causaría errores, y la cadena dinámica anterior no funcionaría en las tablas con nombres que tienen un espacio. Se trataría un nombre como "información de la persona" como "persona". He actualizado el código, y también he hecho que sea un poco más fácil agregar excepciones a la declaración if, si desea que algunas tablas retengan sus datos.

Public Sub TruncateTables() 
    'Majority of code taken from a data dictionary script I can no longer source nor find the author 

    On Error GoTo Error_TruncateTables 

    Dim DB As DAO.Database 
    Dim TDF As DAO.TableDef 
    Dim strSQL_DELETE As String 

    Set DB = CurrentDb() 

     For Each TDF In DB.TableDefs 
      If Not (TDF.Name Like "MSys*" Or TDF.Name Like "~*" Or Len(TDF.Connect) > 0) Then 
       'This will prevent system, temporary and linked tables from being cleared 
       strSQL_DELETE = "DELETE FROM " & "[" & TDF.Name & "]" 
       DB.Execute strSQL_DELETE 
      End If 
     Next 

    MsgBox "Tables have been truncated", vbInformation, "TABLES TRUNCATED" 
    DB.Close 

    Exit_Error_TruncateTables: 
     Set TDF = Nothing 
     Set DB = Nothing 
     Exit Sub 

    Error_TruncateTables: 
     Select Case Err.Number 
      Case 3376 
       Resume Next 'Ignore error if table not found 
      Case 3270 'Property Not Found 
       Resume Next 
      Case Else 
       MsgBox Err.Number & ": " & Err.Description 
       Resume Exit_Error_TruncateTables 
     End Select 
    End Sub 
+1

¡Cuidado! Esto también borrará cualquier tabla vinculada. Editaré para agregar la condición 'Len (tdf.Connect) = 0' para evitar esto. – mvbentes

0

Esto eliminará todos los datos de todas las tablas excepto de tablas del sistema

Dim T As TableDef 
DoCmd.SetWarnings False 
For Each T In CurrentDb.TableDefs 
    If T.Name Like "d2s_*" Then 
     DoCmd.RunSQL "DELETE * FROM " & T.Name 
    End If 
Next T 
DoCmd.SetWarnings True 

Otro enfoque: (basado en la sugerencia de Christopher Duke)

Dim T As TableDef 
DoCmd.SetWarnings False 
For Each T In CurrentDb.TableDefs 
    If Not Left(T.Name, 4) = "MSys" Then 
     DoCmd.RunSQL "DELETE * FROM [" & T.Name & "]" 
    End If 
Next T 
DoCmd.SetWarnings True 
Cuestiones relacionadas