Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Как перехватить значение с GeneratorField   Найти похожие ветки 

 
Yurisimus   (2005-01-07 09:07) [0]

Ситуация такая : Есть две таблицы, которые нужно связать по одному ID(допустим шапка сделки и сам список к этой сделке). При создании новой записи в шапке сделки нужно перехватить ID сделки и присвоить его списку сделки.
А теперь сам вопрос : Как это можно осуществить при помощи IBDataSet и его свойства GeneratorField, т.е. как перехватывать его значение , если можно - пример.


 
P.N.P. ©   (2005-01-07 09:25) [1]

У IBDataSet есть события AfterPost, BeforePost - вот там и перехватывай.
например


procedure TForm1.IBDataSet1AfterPost(DataSet: TDataSet);
begin
SpisokSdelkiID:=IBDataSet1.FieldByName("ID").AsInteger;
end;


 
kaif ©   (2005-01-07 15:47) [2]

Можно (я обычно так и делаю) для компонента TField поля ID в подчиненном DataSet установить значение Required := False и в событии BeforePost подчиненного датасета присваивать значение полю, беря его из "главного" датасета так же, как показал P.N.P.
Можно в событии AfterInsert подчиненного датасета делать это. Тогда Required можно оставить True. Но при работе в сетке я бы не рекомендовал этот подход, так как после присвоения ID полю в только что вставленной записи подчиненный датасет уже будет пытаться делать Post после того как юзер пытается "уйти" с пока пустой для него строки.
------------
Важно помнить лишь, что значение генератора запрашивается IBDataSet-ом в его методе Post. Так что если используется механизм GeneratorField, то не вызвавPost, получить значение генератора невозможно. Если нужно избежать Post во что бы то ни стало, то следует реализовать запрос очередного значения генератора вручную (отдельным запросом).
------------
Наилучшим мне кажется решение, в котором оба запроса подключены к одной транзакции, которая подтверждается/откатывается впоследствии. Можно не беспокоясь делать Post в главном датасете, получать ID и уже потом делать INSERT в младшем датасете, "зная" это значение, как уже "явное значение" поля ID главного датасета. Генератор щелкнет в любом случае (он работает вне контекста транзакции), а вот оба добавления можно будет отменить, откатив общую транзакцию.
Я в базе данных всегда декларирую еще и внешний ключ (FOREIGN KEY) подчиненной таблицы на главную, чтобы ни в коем случае не получить ID в подчиненной таблице, который не соответствовал бы никакой записи в главной.



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.047 c
14-1106037527
}|{yk
2005-01-18 11:38
2005.02.06
Линуксоиды!


1-1106597009
MadGhost
2005-01-24 23:03
2005.02.06
ValueListEditor как вставить в ячейку значение?


14-1106132149
tipman
2005-01-19 13:55
2005.02.06
C# char array в string


4-1103101454
Frost
2004-12-15 12:04
2005.02.06
Как записать файлы на CD-R(W)?


1-1106508346
Алексей
2005-01-23 22:25
2005.02.06
Вызов функции из библиотеки