В моем программном обеспечении используется следующая структура DBX:
TSQLDataSet -> TDataSetProvider -> TClientDataSet
В одном из полей моего TClientDataSet для свойства Required установлено значение false, потому что это поле автоматически увеличивается на основе триггеров и генераторов в базе данных (Firebird).
Однако после настройки как TSQLDataSet, так и TClientDataSet, когда это поле не требуется, я получаю действительно странные результаты, когда пытаюсь прочитать это поле из своего TClientDataSet. Я подозреваю, что мне может потребоваться что-то дополнительное, чтобы заставить мой TClientDataSet получить значение этого поля в этом состоянии.
Что мне здесь не хватает?
Заранее спасибо.
ИЗМЕНИТЬ
В файле справки для свойства Required что-то говорится об этом, но я не мог понять, что от меня требуется.
Описание
Указывает, требуется ли для поля непустое значение.
Используйте параметр «Обязательно», чтобы узнать, требуется ли для поля значение или оно может быть пустым.
Если поле создается с помощью редактора полей, это свойство устанавливается на основе базовой таблицы. Приложения, которые устанавливают для параметра Required значение true для полей, которые должны иметь значения (например, пароль или номер детали), но для которых базовая таблица не требует поля, должны написать обработчик событий OnValidate для принудительного применения свойства.
Когда свойство Required отражает свойство базовой таблицы базы данных, попытка публикации с применением нулевого значения вызывает исключение. Приложения, которые устанавливают для свойства Required значение true, когда для базовой таблицы поле не требуется, должны вызывать исключение EDatabaseError для значений NULL в обработчике событий OnValidate, чтобы добиться того же результата.
ИЗМЕНИТЬ 2
Забыл упомянуть: между TDataSetProvider и TClientDataSet есть слой DataSnap (соединение TClientDataSet осуществляется с помощью драйвера DataSnap).
ИЗМЕНИТЬ 3
Я создал небольшой тестовый пример с этой настройкой DataSnap, и он отлично сработал. Проект устаревший, беспорядочный, и я предполагаю, что либо у меня где-то настроена непонятная опция, которая меня кусает, либо я наткнулся на ошибку DataSnap.
Required
, и часть цитируемых вами документов полностью посвящена записи в данные (в последнем абзаце конкретно говорится о попытке публикации, а в абзаце перед этим упоминает наличие событияOnValidate
для принудительного применения необходимого свойства в ClientDataSet, когда базовая база данных не требует этого, что опять же связано с записью в поле). - person Ken White   schedule 28.01.2012