понедельник, 26 декабря 2011 г.

Урок 26. Обнуление базы данных


Предыдущий урок был посвящен вопросам подключения к базе данных, расположенной на сменном носителе.
Сегодня я хочу показать, как с использованием компонента TADOCommand вносить изменения в базу данных. Мои не случайные читатели, которые следят за ходом событий, спросят: "Что это ты, Александр Львович, все вокруг да около ходишь? Когда же, наконец, мы двинемся дальше?" А скоро, очень скоро мы продолжим разработку основного алгоритма программы (кстати, Вы не забыли, как она называется и для чего, собственно, она предназначена? :-) ). Я стараюсь сохранить интригу. Да и не интересно будет рассказывать о разных мелочах настройки интерфейса и т.п., когда основной материал останется позади. Так что: терпение, мой друг, терпение...
А сейчас нужно добавить новый Action, создав новую категорию Service. Его свойства показаны на рисунке.
Затем положить на форму компонент TADOCommand с вкладки dbGo панели компонентов. Этот компонент как раз предназначен для того, чтобы выполнять запросы к базе данных, не требующие ответов, т.е. такие, которые видоизменяют информацию в базе данных, но не возвращают пользователю никакого набора строк. В нашем случае, например, по окончании календарного года старые записи становятся не очень-то актуальны. Хранить их нужно (мало ли что?!), а вот таскать везде с собой - вовсе не обязательно. Поэтому и существует необходимость почистить наше хранилище.
И последнее, что нужно сделать - написать обработчик события onExecute, не забыв при этом дать объявление процедуре и "подложить" этот Action под один из пунктов меню "Настройки".
Итак, текст обработчика события onExecute:
procedure TMainFrm.Service_ClearExecute(Sender: TObject);
begin
// Предупреждающий диалог с оператором
MyMessenger.MessageString:='Будет произведена полная очистка базы данных'+CR+'Выполнить?';
MyMessenger.TitleString:='Обслуживание...';
MyMessenger.MessageType:=mtConfirmation;
MyMessenger.Buttons:=[mbYes]+[mbNo];
If MyMessenger.ShowMessage=6
Then
Begin
// Выбор БД и подключение (случае, если необходимые данные не вводились и работа программы только началась)
SetDisk;
MainConnecting;
TableActive(True);
// Подготовка
With ADOCommand1 do
begin
CommandTimeout := 45;
Connection := ADOConnection1;
Prepared := True;
MyMessenger.MessageString:='Можно вычислить остатки на начало или обнулить их'
+CR
+CR
+'Вычислить и запомнить остатки на начало?';
If MyMessenger.ShowMessage=6
Then
Begin                              // Вычисление остатков (заготовка на будущее)
// Подсчет оборотной ведомости и перенос вычисленных остатков - зона нашего ближайшего развития
End
Else                               // Обнуление остатков
begin
// Очистка остатков (значения полей Ost_D и Ost_K таблицы  Accounts будут установлены в ноль)
CommandText:= 'UPDATE Accounts SET Accounts.Ost_D = 0, Accounts.Ost_K = 0';
Execute;
end;
// Очистка главной таблицы (удаление всех записей из таблицы)
CommandText:= 'DELETE FROM Main';
Execute;
// Очистка списка МО (удаление всех записей из таблицы)
CommandText:= 'DELETE FROM MOs';
Execute;// Очистка оборотки (разберем на одном из следующих уроков)
//CommandText:= 'DELETE FROM Oborot';
//Execute;


// Сообщение оператору
MyMessenger.MessageString:='Операция завершена успешно';
MyMessenger.MessageType:=mtInformation;
MyMessenger.Buttons:=[mbOK];
MyMessenger.ShowMessage;
end;
End;
end;

Как видно из текста этой несложной процедуры: один компонент TADOCommand выполняет последовательно несколько запросов: один - на изменение данных в таблице Accouts, остальные - на удаление записей из таблиц. Почему записи не следует удалять из таблицы Accounts? Очень просто: эта таблица содержит план счетов, говоря бухгалтерским языком. Или попросту - условно постоянный набор признаков, который можно использовать из года в год.


В следующем уроке я расскажу о подготовке главной формы к полноценному отображению данных с помощью DBGridEh, а так же поговорим о полях LookUp.


Комментариев нет:

Отправить комментарий