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

Вниз

IB не хочет выполнять генераторы???   Найти похожие ветки 

 
Andrio ©   (2003-02-12 14:20) [0]

Естесственно это не весь код :))
При выполнении запроса на создание БД ошибок не возникает,
но при попытке вставить в описываемую ниже таблицу записи
выдается сообщение, что ключевое поле DomNumber не может быть Null.
Правильно - не может. Но его должен заполнить генератор (как я понимаю) в триггере.
Но почему триггер не хочет включаться ???

CREATE TABLE DOMA (
DOMNUMBER integer not null,
MASTER varchar(40),
STREET varchar(25) not null,
DOM varchar(5) not null,
KORPUS varchar(5) not null,
PRIMARY KEY (DOMNUMBER),
FOREIGN KEY (MASTER) references MASTERS
On Delete CASCADE
On Update CASCADE,
FOREIGN KEY (STREET) references STREETS
On Delete CASCADE
On Update CASCADE
)^
CREATE GENERATOR DNumber^
CREATE TRIGGER DomaTr1 FOR Doma
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (new.DomNumber is NULL) then
new.DomNumber=GEN_ID(DNumber,1);
end^


 
kaif ©   (2003-02-12 14:25) [1]

А можно подробнее?
Кто именно ругается? Сервер? Такого быть не может.
Может быть, ругается компонент DataSet (на клиентской стороне), при помощи которого происходит вставка?
Тогда нужно свойство Required := False сделать.


 
Andrio ©   (2003-02-12 14:29) [2]

Пробовал даже в IBConsole
Сервер ругается - точно.


 
Александр С. ©   (2003-02-12 14:42) [3]

Встречается такое сообщение, если для ПК не указать значение.
Пусть при вставке для поля DOMNUMBER всегда отправляется одно и то же значение. Ругани не будет, а после Коммита будут видны подкорректированные триггером значения.
Только триггер нужно исправить
begin
/* if (new.DomNumber is NULL) then эту строку убрать */
new.DomNumber=GEN_ID(DNumber,1);
end^


 
ZDN   (2003-02-12 14:44) [4]

Проблема в коде на клиенте. При добавлении записи в клиентский набор данных /событие AfterInsert/ ты должен запросить новое уникальное значение для DOMNUMBER с помощью выполнения запроса
NewIDDOMNUMBERQuery /текст запроса: SELECT GEN_ID(DNumber,1) FROM RDB$DATABASE/, а затем присвоить его соответсвующему полю в новой, только что вставленной записи:
procedure TDM.PeopleDataSetAfterInsert(DataSet: TDataSet);
begin
if PeopleDataSource.State=dsInsert then
begin
NewIDPeopleQuery.Open;
DataSet.FieldValues["ID_PEOPLE"]:=NewIDPeopleQuery.Fields[0].asInteger;
NewIDPeopleQuery.Close;
end;
end;


С твоим кодом из БД все в порядке, дело как раз в том, что при вставке новой записи на сервере на него с клиента передается набор данных, где DNumber=NULL, соответственно сервак тебе об этом и пишет.
Должно помочь, я сам очень давно столкнулся с такой же проблемой.
Если чего непонятно, задавай вопросы.



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
3-5411
T{}r(l-l
2003-02-11 16:15
2003.03.03
Grid с Editom с поиском(типа Locate)


7-5874
Dracula2000
2003-01-02 17:59
2003.03.03
Срочно!!!! Работа с СОМ-портом


14-5711
RV
2003-02-12 12:26
2003.03.03
15 рублей


14-5838
nick-from
2003-02-12 11:50
2003.03.03
Просто прикол


4-5925
Учитель(Ученик)
2003-01-14 06:35
2003.03.03
ХР