Страница 1 из 1

автоинкрементные поля - срочно!

Добавлено: 15 ноя 2005, 21:30
neznaika
Есть таблица Lease:

CREATE DOMAIN "DNADDRS" AS CHAR(20) NOT NULL;
CREATE DOMAIN "DNDATE" AS TIMESTAMP;
CREATE DOMAIN "DNNUM" AS SMALLINT
CHECK (VALUE > 0) NOT NULL;

/* Table: LEASE, Owner: SYSDBA */

CREATE TABLE "LEASE"
(
"NLEASE" "DNNUM",
"NTN" "DNNUM",
"NON" "DNNUM",
"ADR" "DNADDRS",
"LDATE" "DNDATE",
PRIMARY KEY ("NLEASE")
);
ALTER TABLE "LEASE" ADD FOREIGN KEY ("NTN") REFERENCES TENANT ("NTN");
ALTER TABLE "LEASE" ADD FOREIGN KEY ("NON") REFERENCES OWNER ("NON");

В IBConsol создается следующий триггер:
set term^
create trigger ins_lease for lease
active before insert
as
begin
if (new.nlease is null) then
new.nlease=geN_id(num1,1);
end^
Где num1 - предварительно созданный генератор, lease - таблица, nLease - ключевое поле.
Триггер не работает!
При добавлении записи вручную в IBConsol получаем сообщение об ошибке "поле nlease не может быть пустым"
Что делать? (нужно, чтобы ключевое поле при добавлении записи заполнялось автоматически последовательными целочисленными значениями)

Добавлено: 15 ноя 2005, 21:58
Merlin
Срочно нужно сделать следующее:

1. Забыть smallint как кошмарный сон. Наплачешься по любому с течением времени, не только в ключевых полях.
2. Подумать, так ли уж необходимо при запросах гонять по сетке концевые пробелы типа CHAR. Нет, если там предполагается что-то типа GUID держать, то оно, конешно, надо.
3. Подумать, так ли уж хочется при писании всех запросов в дальнейшем парить себе мозги с кавыками и соблюдением регистра буквиц в идентификаторах.
4. Выкинуть нафик консоль, судя по всему, образца 1812 года. Это сообщение не серверное. Скорее всего в TIBQuery или TIBDataSet, через которые оно работает, поле задано как required по неизречённой мудрости ея автора.

Добавлено: 15 ноя 2005, 22:22
neznaika
Прошу прощения, но мне кажется, тип данных здесь не должен играть такой роли.

По какой-то причине триггер просто не запускается.
Например, когда мы делали каскадное удаление с помощью триггера, триггер не срабатывал до тех пор, пока не удалили ограничение Foreign Key. Здесь может, тоже что-то в таком духе? Только не удалять же primary key! Может, можно удалить только ограничение not null? А что тогда будет с ключом?

А консоль - уж какая есть в Delphi... version 1.0.1.340

Добавлено: 15 ноя 2005, 22:29
Merlin
Ндя... Так издали я мозги вправлять не берусь. Мож найдётся кто терпеливый.

Добавлено: 15 ноя 2005, 22:45
neznaika
Спасибо за участие:) Будем дальше парить собственные кривые (или прямые?) мозги...

Добавлено: 16 ноя 2005, 18:42
smu
neznaika писал(а): ...
А консоль - уж какая есть в Delphi... version 1.0.1.340
Сходи на www.ibexpert.com. Про стандартную консоль забудь.

Добавлено: 17 ноя 2005, 10:48
Dioxin
Насколько мне кажется - если чтото primary key, то оно и так not null.
Априори!