Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
6-5706
Sniffer
2003-01-12 18:51
2003.03.03
ServerSocket и ClientSocket


14-5723
michael_b
2003-02-14 17:15
2003.03.03
Оценка сложности процедуры


14-5792
Krionix
2003-02-12 16:10
2003.03.03
компонент для отображения документа MSWord в Delphi


14-5843
Кот Бегемот
2003-02-12 17:11
2003.03.03
Потрясающе :) Какие же красивые девушки у нас в стране.


3-5456
alexander_ua
2003-02-11 18:27
2003.03.03
Редактирование с помощью SQL




   Наверх