Как удалить данные во всех таблицах ms-access сразу? - PullRequest
7 голосов
/ 26 марта 2009

Есть ли способ в MS-Access удалить данные во всех таблицах одновременно. Мы запускаем базу данных в доступе, сохраняем данные каждый месяц, а затем удаляем все данные в доступе. Но это требует удаления данных из множества таблиц. Нет ли более простого / легкого способа сделать это?

Ответы [ 6 ]

16 голосов
/ 26 марта 2009

Почему бы вам не сохранить пустую копию базы данных под рукой. В конце месяца сохраните существующую базу данных, затем скопируйте на ее место пустую базу данных.

11 голосов
/ 26 марта 2009

Ответ Крейга прост и разумен. Если вам действительно нужно программное решение, следующий скрипт VBA удалит все данные из каждой таблицы, кроме скрытых таблиц. Для этого требуется включить DAO - в редакторе Visual Basic выберите Сервис -> Ссылки и установите флажок Библиотека объектов Microsoft DAO 3.6, затем нажмите ОК:

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
9 голосов
/ 30 сентября 2014

Отличный ответ от Алистера, хотя его нужно обновить. Старый оператор if может вызвать ошибки, а старая динамическая строка не будет работать с таблицами с именами, которые имеют пробел. Это будет относиться к имени, как «информация о человеке», как «человек». Я обновил код, а также немного упростил добавление исключений в оператор if, если вы хотите, чтобы некоторые таблицы сохраняли свои данные.

 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
0 голосов
/ 24 февраля 2016

Это удалит все данные из всех таблиц, кроме системных таблиц

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

Другой подход: (на основе предложения Кристофер Дюк )

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
0 голосов
/ 08 января 2013

Выделите все строки и нажмите клавишу Delete на клавиатуре. Если доступ делает то, что не позволяет вам перейти на дно, перейдите в ячейку и нажмите Ctrl + стрелка вниз. Чтобы выделить все строки, выделите верхний ряд, а затем выделите нижний ряд и, удерживая нажатой клавишу Shift, выберите нижний ряд. Все строки должны быть выделены.

0 голосов
/ 26 марта 2009

Поскольку это повторяющееся действие, было бы лучше, если бы вы сделали простой сценарий SQL для этого.

DELETE FROM <table1>;
DELETE FROM <table2>;
...
DELETE FROM <tablen>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...