ソフトウェアに次の DBX 構造があります。
TSQLDataSet -> TDataSetProvider -> TClientDataSet
TClientDataSet のフィールドの 1 つで、Required プロパティが false に設定されています。これは、このフィールドがデータベース (Firebird) のトリガーとジェネレーターに基づいて自動インクリメントするためです。
しかし、TSQLDataSet と TClientDataSet の両方をこのフィールドが必須でないように構成した後、TClientDataSet からこのフィールドを読み取ろうとすると、非常に奇妙な結果が得られます。この状態で TClientDataSet にこのフィールドの値を強制的に取得させるには、何か特別なことをする必要があるのではないかと思います。
ここで何が欠けていますか?
前もって感謝します。
編集
Required プロパティのヘルプ ファイルには、これについての記述がありますが、何をしたいのかよくわかりませんでした。
説明
フィールドに空白以外の値が必要かどうかを指定します。
Required を使用して、フィールドに値が必要かどうか、またはフィールドを空白にすることができるかどうかを調べます。
フィールド エディターでフィールドが作成された場合、このプロパティは基になるテーブルに基づいて設定されます。値が必要なフィールド (パスワードや部品番号など) に対して Required を true に設定するが、基になるテーブルでフィールドが必要とされないアプリケーションは、プロパティを適用するために OnValidate イベント ハンドラーを作成する必要があります。
Required プロパティが基になるデータベース テーブルのプロパティを反映している場合、null 値をポスト適用しようとすると、例外が発生します。基になるテーブルがフィールドを必要としない場合に Required プロパティを true に設定するアプリケーションは、同じ結果を得るために、OnValidate イベント ハンドラーで null 値に対して EDatabaseError 例外を発生させる必要があります。
編集2
言い忘れましたが、TDataSetProvider と TClientDataSet の間には DataSnap 層があります (TClientDataSet 接続は DataSnap ドライバで行われます)。
編集3
この DataSnap セットアップで小さなテスト ケースを作成したところ、完全に機能しました。このプロジェクトはレガシーで乱雑で、私を悩ませているどこかであいまいなオプションを構成しているか、DataSnap のバグに遭遇したかのいずれかだと思います。