FB 2.0 + TIBDataSet + TDBGrid проблема InsertSQL?

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
sdsfy
Сообщения: 43
Зарегистрирован: 03 апр 2008, 00:09

FB 2.0 + TIBDataSet + TDBGrid проблема InsertSQL?

Сообщение sdsfy » 30 янв 2011, 05:42

Имеется некоторая таблица с четырьмя полями (все существенные структуры и код описаны ниже).
При попытке ввода новой записи через 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);

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: FB 2.0 + TIBDataSet + TDBGrid проблема InsertSQL?

Сообщение Dimitry Sibiryakov » 30 янв 2011, 14:29

RTFM TField.Required

Ответить