FireDAC.Stan.Option.TFDFormatOptions.Round2Scale
Delphi
property Round2Scale: Boolean read GetRound2Scale write SetRound2Scale stored IsRSS default False;
C++
__property bool Round2Scale = {read=GetRound2Scale, write=SetRound2Scale, stored=IsRSS, default=0};
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
property | published | FireDAC.Stan.Option.pas FireDAC.Stan.Option.hpp |
FireDAC.Stan.Option | TFDFormatOptions |
説明
値の丸めを制御します。
Round2Scale プロパティを使用すると、FireDAC は、数値および時間の値を、データベース内で指定されたサイズに丸めるかどうかを、制御することができます。デフォルト値は False です。
True の場合、丸めが実行されます。丸めはクライアント側で、アプリケーションが値を、数値/時間/日時型のフィールドに割り当てるときにのみ、発生します。丸めには、対応する TFDDatSColumn.Scale 値を使用します。数値の場合、小数点以降の桁数です。時間の場合、サポートされる最大精度を、ミリ秒で表します。
Round2Scale プロパティを True に設定すると、アプリケーションは、丸めで発生するエラーを避けることができます。
以下のシナリオについて考えてみましょう: アプリケーションには、UpdateOptions.LockMode = lmOptimistic
が設定されており、DATE フィールドを持つ Oracle テーブルに対して、シンプルな SELECT の ADQuery があります。Oracle での DATE データ型の精度は、1 秒です。ここで、新しいレコードを追加し、Now() の結果を DATE フィールドに割り当て、その変更をデータベースに送信します。クライアント レコード バッファは、値を数ミリ秒で格納する一方、データベースは値をミリ秒かからず格納します。レコードの編集を試みます。その前に、ロックが実行されます。しかし、FireDAC は、クライアント バッファからのフィールド値と、データベースからフェッチしてきたばかりの値の比較に失敗します。その結果、"DApt-400" 例外が発生します。
ところが、Round2Scale が True に設定されている場合、FireDAC はクライアント値を秒まで丸めてるので、比較に成功します。