Delphi не позволяет мне вставлять строки с отсутствующими столбцами, но с триггерами и генераторами для этих полей - PullRequest
2 голосов
/ 26 января 2012

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

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

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

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

Field 'XXX' must have a value

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

Как заставить Delphi (DBX, DataSnap и тому подобное) понять, что я пытаюсь сделать (и разрешить это)?

EDIT

Предоставление дополнительной информации на основе комментария @ mj2008: этот TClientDataSet создается во время выполнения с использованием метода CloneCursor. После вызова CloneCursor я установил для свойства поля Required значение False. Это не помогает с этой проблемой. Пример:

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

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

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Мне также пришлось установить для свойства Required в TSQLDataset значение False.Это решило проблему.

0 голосов
/ 26 января 2012

Просто для дополнения: когда вы делаете настройку TClientDataset, обновления в конце отправляются компоненту доступа к данным, в данном случае TSQLDataset, поэтому даже если TClientdataset не требует значения поля, если компонент доступа к данным требует, чтобы возникла ошибка.

Это будет то же самое, даже если данные поступают из набора данных TADODataset, TIbDataset или чего-либо другого.

...