![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с генераторами в IB->Delphi [D5, D6, IB6.x]
MyVeryShortLogin © (2002-08-26 12:13:00)создал генератор, триггер:
CREATE GENERATOR "IDNO_GEN";
CREATE TRIGGER "CREATE_ID" FOR "TEST"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ID = GEN_ID(IDNO_GEN, 1);
END
если вставка происходит SQL запросом (insert into...), то все ОК,
а если через TDBGid в Delphi, то вылетает еггог-а "Field "ID" must have value", т.е. триггер не запускается, как лечить?
MyVeryShortLogin (2002-08-26 13:16:00) [1]2 Reindeer Moss Eater поле ID у меня NOT NULL PRIMARY KEY
2 Leran2002 сенкс, заработало, только приращивает с шагом 2, но это мелочи, хотя если знаешь в чем дело, то буду благодарен.
Leran2002 (2002-08-26 12:22:00) [2]Отрывок из статьи на www.ibase.ru:
использование хранимой процедуры не всегда удобно - BDE может решить, что процедура вероятно изменяет какие-то данные на сервере, и в режиме autocommit завершит текущую транзакцию, что вызовет перечитывание данных TTable и TQuery. Более простым способом является получение значения генератора при помощи запроса:
SELECT GEN_ID(NEWCLIENT, 1) FROM RDB$DATABASE
При этом, если запрос помещен например в Query2, текст в BeforePost будет следующим:
begin
if DataSource.State = dsInsert then
begin
Query2.Open;
ClientTable.FieldByName("CLIENT_ID").asInteger:=
Query2.Fields[0].asInteger;
Query2.Close;
end;
end;
Reindeer Moss Eater (2002-08-26 12:18:00) [3]Триггер запускается.
Установи свойство Required для этого TField в False