Delphi не позволит мне вставить строки со пропущенными колоннами, но с триггерами и генераторами для этих полей

StackOverflow https://stackoverflow.com/questions/9021397

Вопрос

Проблема проста: у меня есть триггеры и генераторы в моей базе данных Firebird 2.4, чтобы сделать автоматическое увеличение столбца на каждой вставке.

Архитектура системы выглядит следующим образом:

TSQLConnection > TSQLDataSet -> TDataSetProvider -> (DataSnap) -> TClientDataSet -> TDataSource
.

Однако, если я попытаюсь публиковать обновления в моем TClientDataset с некоторой недостающей колонкой, Delphi будет жаловаться так:

Field 'XXX' must have a value
.

Если я использую оператор SQL INSERT с этими полями, отсутствующими, строка вставлена, а триггеры и генераторы работают, как и ожидалось.

Как сделать delphi (dbx, datasnap и такое) понять, что я пытаюсь сделать (и разрешить)?

Редактировать

Предоставление дополнительной информации на основе комментариев @ MJ2008: этот TClientDataSet создается во время выполнения, используя метод Clonecursor.После звонка Clonecursor я установил требуемое свойство этого поля в false.Это не помогает с этой проблемой.Пример:

myCds.CloneCursor(otherCds, True);
myCds.FieldByName('XXX').Required := False;
.

Это приводит к тому же выдающемуся исключением.

Это было полезно?

Решение

I had to set the TSQLDataset's Required property to False too. That solved the issue.

Другие советы

Just to complement: when you do a TClientDataset setting, the updates are in the end sent to the data access component, in this case TSQLDataset, so even if the TClientdataset doesn't require the field's value, if the data access component requires it the error is raised.

It'll be the same even if data come from a TADODataset, TIbDataset, or whatever.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top