問題は単純です。Firebird2.1.4データベースにトリガーとジェネレーターがあり、挿入ごとに列を自動インクリメントします。
システムのアーキテクチャは次のとおりです。
TSQLConnection > TSQLDataSet -> TDataSetProvider -> (DataSnap) -> TClientDataSet -> TDataSource
ただし、列が欠落しているTClientDataSetに更新を投稿しようとすると、Delphiは次のように文句を言います。
Field 'XXX' must have a value
これらのフィールドが欠落しているSQL挿入ステートメントを使用すると、行が挿入され、トリガーとジェネレーターが期待どおりに機能します。
Delphi(DBX、DataSnapなど)に自分がやろうとしていることを理解させる(そして許可する)にはどうすればよいですか?
編集
@ mj2008のコメントに基づいて詳細情報を提供します。このTClientDataSetは、CloneCursorメソッドを使用して実行時に作成されます。CloneCursorを呼び出した後、このフィールドのRequiredプロパティをFalseに設定しました。この問題には役立ちません。例:
myCds.CloneCursor(otherCds, True);
myCds.FieldByName('XXX').Required := False;
これにより、同じ例外がスローされます。