Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование БД в Delphi ВТиП.doc
Скачиваний:
53
Добавлен:
17.03.2016
Размер:
3.62 Mб
Скачать

Implementation

procedure TDM.tbNaklsBeforeDelete(DataSet: TDataSet);

begin

//Изменяем финансовое или обменное сальдо партнера

//в соответствии с типом накладной:

tbFirms.Edit; //Редактируем НД tbFirms

case tbNaklsNType.AsInteger of

0,3,6: tbFirmsFFinDelta.AsFloat := tbFirmsFFinDelta.AsFloat +

tbNaklsNSum.AsFloat;

4: tbFirmsFChgDelta.AsFloat := tbFirmsFChgDelta.AsFloat +

tbNaklsNSum.AsFloat;

5: tbFirmsFChgDelta.AsFloat := tbFirmsFChgDelta.AsFloat –

tbNaklsNSum.AsFloat;

else tbFirmsFFinDelta.AsFloat := tbFirmsFFinDelta.AsFloat –

tbNaklsNSum.AsFloat;

end;

tbFirms.Post; //Запоминаем сделанные изменения в НД Firms

IsNaklDel := True; //Блокируем часть действий обработчика tbMoveBeforeDelete (описание переменной IsNaklDel см. выше - в секции Private класса TDM)

while not tbMove.EOF do //Пока в списке книг есть хотя бы одна книга,

//удаляем ее

tbMove.Delete; //Удаление текущей записи (книги) в НД tbMove

//Восстанавливаем работу обработчика tbMoveBeforeDelete

IsNaklDel := False;

end;

Полный код обработчика MoveBeforeDelete приведен ниже

procedure TDM.tbMoveBeforeDelete(DataSet: TDataSet);

var

Sum: real;

begin

tbBooks.Edit; //Редактируем НД tbBooks

//Изменяем количество книг на складе с учетом типа накладной:

//если по накладной были получены книги, из общего количества

//книг на складе вычитаем количество книг в удаляемой записи,

//в противном случае - прибавляем

case tbNaklsNType.AsInteger of

0,3,4,6: tbBooksBQuan.Value := tbBooksBQuan.Value - tbMoveMQuan.Value;

else

tbBooksBQuan.Value := tbBooksBQuan.Value + tbMoveMQuan.Value;

end;

tbBooks.Post; //Запоминаем изменения НД tbBooks

//Если обработчик активизирован при удалении накладной, его работу

//нужно завершить, в противном случае (при удалении записи в сетке

// DBGrid2) следует изменить сальдо партнера и сумму в накладной

if IsNaklDel then Exit; //Активизация при удалении накладной?

//-Да. Завершаем работу

Sum := tbMoveMQuan.AsInteger * tbMoveMPrice.AsFloat;

//Изменяем финансовое или обменное сальдо партнера

tbFirms.Edit; //Редактируем НД Firms

case tbNaklsNType.AsInteger of

0,3,6: tbFirmsFFinDelta.AsFloat := tbFirmsFFinDelta.AsFloat + Sum;

4: tbFirmsFChgDelta.AsFloat := tbFirmsFChgDelta.AsFloat + Sum;

5: tbFirmsFChgDelta.AsFloat := tbFirmsFChgDelta.AsFloat - Sum;

else tbFirmsFFinDelta.AsFloat := tbFirmsFFinDelta.AsFloat - Sum;

end;

tbFirms.Post; //Запоминаем изменения в НД Firms

//Изменяем сумму в накладной

tbNakls.Edit; //Редактируем НД tbNakls

tbNaklsNSum.AsFloat := tbNaklsNSum.AsFloat - Sum;

tbNakls.Post; //Запоминаем изменения в НД tbNakls

end;

  1. Sql запросы к бд

Характерной особенностью компонента TQuery(запрос) является использование в нем языкаSQL. С помощью этого языка программист составляетSQL-запрос, который помещается в предназначенное для этого свойство SQL компонента TQuery.

После активизации свойства Active = Trueлибо вызова методовOpenилиExecSQLкомпонентаTQueryэтот запрос передается машине баз данныхBDE, которая имеет встроенный интерпретаторSQL, позволяющий ей выполнять описанные в запросе действия.

Если запрос требует получения из БДнужных сведений (запросSELECT), сформированные с помощьюBDEданные помещаются в локальную таблицу в виде временного файла в каталоге запуска программы, и компонентTQueryстановится владельцем этой таблицы.

Данные из временной таблицы через компонент-посредник TDataSourceпередаются визуальным компонентам и отображаются в них точно так же, как если бы они были получены компонентомTTable. Однако, в отличие отTTable, пользователь не может изменять эти данные, так как они представляют собой лишь копию реальных данных.

Для изменения хранящейся в БДинформации формируются специальные запросы (INSERT,UPDATE,DELETE и т.д.). В этом случаеBDEне формирует новые и никак не использует ранее созданные временные таблицы, но лишь интерпретирует запрос и уведомляет программу о том, насколько успешно прошло его выполнение. Таким образом, необходимость программного изменения запроса в случае модификацииНДявляется другим характерным отличием компонентовTQueryотTTable.