Всем доброго времени суток.
Что-то застрял на одной задачке простенькой, 2 вечера просидел с ней, так и не понял в чем я неправ. Может кто подскажет?
Есть Таблица Conts. В ней по сути контакты различных лиц. в качестве ID использую поле по имене Kod (старая история..).
Реализация в дельфи:
ADOConnection -> DataSource -> ADODataSet
В ADODataSet есть вычисляемые поля.
Два из этих полей, работают отлично. Первое по датам вычисляется, второе примерно так:
Код:
If Not DataSet.FieldByName('Foto').IsNull then
DataSet.FieldByName('FotoInk').AsInteger := 3
else
DataSet.FieldByName('FotoInk').AsInteger := 0;
Все это в обработчики события "OnCalcField" (Или как правильно называется?.. не важно) Conts_DataSet.
Так же есть вспомогательная табличка, Alarms_DataSet. Напоминания для каждого лица главной таблицы.
Так вот задача сводится к тому что бы в Гриде вывести картинку в вычисляемой колонке у тех лиц, у которых есть хотя бы одно напоминание. Сделал ADOQuery.
SQL:
Код:
Select Count(*) as Cnt From CONTS_ALARMS
where Cont_ID = :Cont_ID
DataSource для запроса выбрал именно Alarms
Далее в событии "OnCalcField" основной таблицы присваиваю к параметру ":Cont_ID" значение Kod из главной таблици. Открываю Запрос. Делаю проверку:
Код:
Query.Parametrs.ParamByName('Cont_ID').Value := DataSet.FieldByName('Kod').Value;
Query.Open;
If Query.FieldByName('Cnt').AsInteger > 0 then
DataSet.FieldByName('AlarInk').AsInteger := 4
else
DataSet.FieldByName('AlarInk').AsInteger := 0;
Query.Close;
Все это в теле OnCalcField Главной таблицы.
Конечно такой проверкой сжираю много ресурсов. Обдумываю сейчас другой вариант.
СУТЬ проблемы в том, что когда проглядываю этот алгоритм в отладчике, все работает совершенно правильно. После отработки, в грид выводится по всему столбцу одно и тоже значение опираясь на последнюю запись в главной таблице.
В общем буду рад любому наставлению, совету, нагоняю и т.д. =)