автоинкрементные поля - срочно!
Модератор: kdv
автоинкрементные поля - срочно!
Есть таблица 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 не может быть пустым"
Что делать? (нужно, чтобы ключевое поле при добавлении записи заполнялось автоматически последовательными целочисленными значениями)
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 не может быть пустым"
Что делать? (нужно, чтобы ключевое поле при добавлении записи заполнялось автоматически последовательными целочисленными значениями)
Срочно нужно сделать следующее:
1. Забыть smallint как кошмарный сон. Наплачешься по любому с течением времени, не только в ключевых полях.
2. Подумать, так ли уж необходимо при запросах гонять по сетке концевые пробелы типа CHAR. Нет, если там предполагается что-то типа GUID держать, то оно, конешно, надо.
3. Подумать, так ли уж хочется при писании всех запросов в дальнейшем парить себе мозги с кавыками и соблюдением регистра буквиц в идентификаторах.
4. Выкинуть нафик консоль, судя по всему, образца 1812 года. Это сообщение не серверное. Скорее всего в TIBQuery или TIBDataSet, через которые оно работает, поле задано как required по неизречённой мудрости ея автора.
1. Забыть smallint как кошмарный сон. Наплачешься по любому с течением времени, не только в ключевых полях.
2. Подумать, так ли уж необходимо при запросах гонять по сетке концевые пробелы типа CHAR. Нет, если там предполагается что-то типа GUID держать, то оно, конешно, надо.
3. Подумать, так ли уж хочется при писании всех запросов в дальнейшем парить себе мозги с кавыками и соблюдением регистра буквиц в идентификаторах.
4. Выкинуть нафик консоль, судя по всему, образца 1812 года. Это сообщение не серверное. Скорее всего в TIBQuery или TIBDataSet, через которые оно работает, поле задано как required по неизречённой мудрости ея автора.
Прошу прощения, но мне кажется, тип данных здесь не должен играть такой роли.
По какой-то причине триггер просто не запускается.
Например, когда мы делали каскадное удаление с помощью триггера, триггер не срабатывал до тех пор, пока не удалили ограничение Foreign Key. Здесь может, тоже что-то в таком духе? Только не удалять же primary key! Может, можно удалить только ограничение not null? А что тогда будет с ключом?
А консоль - уж какая есть в Delphi... version 1.0.1.340
По какой-то причине триггер просто не запускается.
Например, когда мы делали каскадное удаление с помощью триггера, триггер не срабатывал до тех пор, пока не удалили ограничение Foreign Key. Здесь может, тоже что-то в таком духе? Только не удалять же primary key! Может, можно удалить только ограничение not null? А что тогда будет с ключом?
А консоль - уж какая есть в Delphi... version 1.0.1.340
Сходи на www.ibexpert.com. Про стандартную консоль забудь.neznaika писал(а): ...
А консоль - уж какая есть в Delphi... version 1.0.1.340