Всем привет, опять же, пишу статью про ADO, а также по просьбе читателя моего блога, который попросил рассказать, как в БД можно работать с вычисляемыми полями (чтобы значение вычисляемого поля сразу менялось, при вводе нового значения), на примере БД — MS Access. Я расскажу 2 способа работы с вычисляемые полями, а на примере покажу только один способ. Ну, первый способ состоит в том, что все поля, в том числе и вычисляемое, мы создаем сразу в БД - MS Access, причем тип данных, поля, в котором будет менять значение — указываем Вычисляемое поле.
Что касается второго способа, то вычисляемое поле, мы создадим в нашем проекте, через компоненты TAdoQuery или TAdoTable.
Ну и сразу скажу, что есть, не очень правильный 3 метод, при котором можно использовать TTimer.
Давайте начнем с нашей БД.
У меня в БД имеет следующую структуру:
Итак, БД в MS Access у нас создана, теперь переходим к самому проекту в Delphi, на форме у меня следующие компоненты:
- TDataSource
- TDBGrid
- TADOConnection
- TADOQuery
- TButton
Теперь, делаем подключение к нашей БД, как это делать, мы рассматривали в статье, так что заострять внимание на этом, я не буду. Далее, нам необходимо все наши компоненты связать между собой, ну вот и приступим. Выделяем компонент TADOQuery и в свойстве Connection указываем — TADOConenction. Далее, выделяем компонент TDataSource и в свойстве DataSet указываем TADOQuery. Затем, выделяем компонент TDBGrid и в свойстве DataSource указываем TDataSource.
Все, теперь добавим все наши поля. Для этого, нам необходимо активировать наш запрос и подключение. В свойстве компонента TADOConenction — Connected устанавливаем True, а в свойстве компонента TADOQuery - SQL, напишем следующий запрос
SELECT * FROM Test
Имя, нашей таблицы — Test. Ну и далее, активируем наш запрос, в свойстве Active, компонента TADOQuery устанавливаем в True.
Далее нажимаем, двойным щелчком мыши по компоненту TADOQuery и появляется окно:
В данном окне, нажимаем правой кнопкой мыши, и из контекстного меню, выбираем пункт Add all fields. В список добавиться все наши поля таблицы.
Ну, а теперь создадим наше Вычисляемое поле. Для этого, в данном окне, нажимаем правой кнопкой мыши и из контекстного меню выбираем пункт New Field, после чего появиться окно, где необходимо заполнить поля, как показано на рисунке:
Указываем имя нашего вычисляемого поля, устанавливаем указатель на Calculated и указываем тип данных — Integer, можно и с плавающей точкой, какой Вам удобно.
Ну, а дальше, выделяем компонент TADOQuery и на событие OnCalcFields напишем следующий код:
procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
begin
ADOQuery1Sum.AsInteger:=ADOQuery1Values.AsInteger*ADOQuery1Count.AsInteger;
end;
Не забываем, что свойство AutoCalcFields, компонента TADOQuery должно быть установлено в True
Как видите, ничего сложного нету. Как я говорил раньше, можно сразу же в БД создать вычисляемое поле, а можно в проекте. Теперь при изменении значения в любой из ячеек, значение нашего вычисляемого поля автоматические будет меняться.