При попытке ввода новой записи через DBGrid, без явного указания значения (абсолютно любого, хоть 0, хоть 100, хоть любое дублирование уже хрянящегося в одной из записи) "автоинкрементного" поля, значение в которое заносится Before Insert Триггером, выдается ошибка - Field 'CLASSID' must have a value.. Самое интересное, что в InsertSQL это поле вообще пропущено, но если вписать значение в DBDrid в это поле явно, то ошибка не выдается, а фактическое значение будет взято от Триггера.
Я вообще не пойму, откуда (на каком уровне) инициируется эта ошибка? 99% процентов уверен, что это не сервер. Тогда кто? IBX компонент? Который? TDBGrid? или TDataSource?
Кто может подсказать?
Код: Выделить всё
CREATE TABLE DeviceClasses (
ClassID UID /*Integer NOT NULL*/ NOT NULL,
ClassName VChar256 /*Varchar(256) */ NOT NULL,
RegisteringTime TDateTime /*TimeStamp NOT NULL*/ NOT NULL,
Comment Comment /*Blob SUB_TYPE 0 */,
CONSTRAINT PK_DeviceClasses PRIMARY KEY (ClassID),
CONSTRAINT UNQ_DeviceClasses_1 UNIQUE (ClassName)
);
Код: Выделить всё
CREATE TRIGGER TR_GEN_DeviceClasses_ID FOR DeviceClasses
ACTIVE BEFORE INSERT POSITION 0
AS
begin
IF (NEW.ClassID IS NULL) THEN
NEW.ClassID=GEN_ID(GEN_DeviceClasses_ID,1);
end
InsertSQL
Код: Выделить всё
insert into DEVICECLASSES (CLASSNAME, COMMENT) VALUES (:CLASSNAME, :COMMENT);