в TUniQuery (DataSet от UniDac) у полей DefaultExpression не работает

PG81
Дата: 26.05.2011 17:19:54
Есть датасет tab1 типа TUniQuery из компонентов UniDac.В нем несколько полей
kod_form - внешний ключ из другой таблицы
nom_pp - номер по порядку
obj_name - имя объекта

(kod_form, nom_pp) ключ таблицы

Полю nom_pp задаю свойство DefaultExpression таким занчением
(SELECT max(kod)FROM tab1 WHERE kod_form=:kod_form)

При вставке записи значение почему-то всегда одинаковое ноль.
Вобщем параметр не подставляется.
Возможно ли вообще такой вариант, или что-то не правильно делаю. Пробовал писать new или old одинаково.\
если просто (SELECT max(kod)FROM tab1 ) то работает но мне так не нужно
Johnmen
Дата: 26.05.2011 17:31:57
PG81,

автор
(SELECT max(kod)FROM tab1 WHERE kod_form=:kod_form)

При вставке записи значение почему-то всегда одинаковое ноль.

Естественно, ведь значение параметра при вставке неопределенно.
PG81
Дата: 26.05.2011 17:51:26
Johnmen,

отношение задано MasterDetail и kod_form будет браться из главного датасета и при добавлении записи значение туда автоматически подставляется.

Вопрос тогда в том что бы сделать так чтобы в поле kod_form попадало раньше чем в SQL запрос в другом поле
НеОптимист
Дата: 27.05.2011 10:07:30
PG81,

Попробуй заполнять поле nom_pp в событии AfterInsert. Там, я думаю, поле kod_form уже заполнено.
PG81
Дата: 27.05.2011 10:37:01
НеОптимист,

не охото плодить лишние события,
у меня все датасеты и поля формируются динамически по сведениям из БД, где прописываются все свойства оных.
Нужет какой-то способ как-то запихать туда это значение.
pit_alex
Дата: 27.05.2011 10:49:00
PG81,

а тригер для этого не подойдет?
pit_alex
Дата: 27.05.2011 11:01:30
PG81,

или прописать свой insert запрос в TUniQuery.SQLInsert что то типа

insert into tab1(kod_form, nom_pp, obj_name)
values (:kod_form, (SELECT max(kod)FROM tab1 WHERE kod_form=:kod_form), :obj_name)
PG81
Дата: 27.05.2011 11:25:02
pit_alex
а тригер для этого не подойдет?


впринципе подойдет, но просто хотелось чтобы можно было из программы такие просты вещи задавать, а не в БД ковыряться
pit_alex
Дата: 27.05.2011 11:33:53
PG81,

тогда второй вариант, но тригер ИМХО будет правильней