Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.036 c
14-5868
down
2003-02-14 13:05
2003.03.03
исходники filemon


14-5750
Карлсон
2003-02-15 15:24
2003.03.03
чем записать?


14-5754
Pat
2003-02-15 20:08
2003.03.03
Скорость создания отчета в MSWord97


1-5594
Nehto
2003-02-19 19:55
2003.03.03
Kak udalit ne pustoj katalog


1-5505
h@1f-e1f
2003-02-20 16:02
2003.03.03
Как переводить каретку в Richedit/Memo?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский