FB 2.0 + TIBDataSet + TDBGrid проблема InsertSQL?
Добавлено: 30 янв 2011, 05:42
Имеется некоторая таблица с четырьмя полями (все существенные структуры и код описаны ниже).
При попытке ввода новой записи через DBGrid, без явного указания значения (абсолютно любого, хоть 0, хоть 100, хоть любое дублирование уже хрянящегося в одной из записи) "автоинкрементного" поля, значение в которое заносится Before Insert Триггером, выдается ошибка - Field 'CLASSID' must have a value.. Самое интересное, что в InsertSQL это поле вообще пропущено, но если вписать значение в DBDrid в это поле явно, то ошибка не выдается, а фактическое значение будет взято от Триггера.
Я вообще не пойму, откуда (на каком уровне) инициируется эта ошибка? 99% процентов уверен, что это не сервер. Тогда кто? IBX компонент? Который? TDBGrid? или TDataSource?
Кто может подсказать?
Триггер
InsertSQL
При попытке ввода новой записи через 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);