Страницы

понедельник, 8 июня 2015 г.

Удаление тестовых данных из таблиц Access

Удалять тестовые данные можно и вручную – выбрал таблицу, выделил все строки и удалил. Но тут нужно помнить, в каких таблицах тестовые значения, а в каких нет. Например, справочники-классификаторы или настройки не нужно удалять. А также необходимо следить за порядком таблиц при удалении. Сначала выбираются подчиненные таблицы, затем главные. Иначе из-за соблюдения правил целостности данных ничего не удалится. Ну, и еще, если таблиц много, или приходится удалять тесты несколько раз, то это довольно утомительно. Рассмотрим, как быстро и просто сделать это программным путем.
Отладить метод желательно на копии. Или создать в базе копии таблиц во избежание потери данных.
Возьмем базу данных «Абитуриенты». Схема данных приведена на рисунке:

Схема данных базы данных Абитуриенты

Создадим еще одну таблицу («ДляУдаления») с двумя полями: порядковым номером и названием таблицы.

Создание таблицы Access

Внесем в нее названия таблиц, из которых нужно удалить данные по порядку удаления, сначала таблицу «Абитуриенты», затем кафедры и специальности. Учебные заведения удалять не будем.


Переходим в редактор Visual Basic (Alt+F11) и создаем новый модуль или добавляем в ранее созданный (если такой есть), пишем в нем текст:
Option Compare Database
Option Explicit

Public Function ClearData()
'удаляем все данные из таблиц,
'указанных в таблице ДляУдаления
On Error GoTo HandleErr
    'объявляем переменную - базу данных
    Dim db As DAO.Database
    'объявляем переменную - набор данных
    Dim rs As DAO.Recordset
    'текущая база данных
    Set db = CurrentDb
    'набор данных (рекордсет) - таблица ДляУдаления
    Set rs = db.OpenRecordset("ДляУдаления", dbOpenSnapshot)
    'перебор строк в набореЮ пока не достигнут конец
    Do Until rs.EOF
        'запрос - удалить все строки из указанной таблицы
        db.Execute "DELETE * FROM " & rs("НазваниеТаблицы")
        rs.MoveNext
    Loop
    'закрываем набор
    rs.Close
    Set rs = Nothing
    MsgBox "Очистка данных выполнена", , "Удаление данных"
    'возврат результата - истина
    ClearData = True
   
ExitHere:
        Exit Function
'обработка ошибок
HandleErr:
    ClearData = False
    MsgBox "Ошибка " & Err & ": " & Err.Description, , "Очистка данных Cleardata"
    Resume ExitHere
End Function
Запустить эту функцию можно из редактора, а можно создать форму. Создадим простую форму в конструкторе, добавим кнопку для запуска функции очистки. На первом шаге работы мастера после добавления кнопки нажимаем отмену. В свойствах кнопки изменяем ее подпись, а в событиях (Нажатие кнопки) пишем «=ClearData()» (без кавычек).

Настройка кнопки Access

Сохраняем все, запускаем форму и нажимаем кнопку.


Но базой еще рано пользоваться. Данные на самом деле не удалены, а помечены на удаление. Поэтому размер базы большой, а счетчики (например, в ключевых полях) не обнулены. Если начать добавлять данные сейчас, то отсчет начнется с последнего введенного значения. Вот, например, код кафедры начинается с 10, а не с 1.


Чтобы удалить данные совсем, перейдем в меню «Файл», раздел сведения. Нажмем кнопку «Сжать и восстановить базу данных». После этого размер уменьшится, а счетчики обнулятся. Можно работать.