Здравствуй, читатель. Давно мы не встречались с тобой.
Хочу поведать тебе об одной ошибке, выявление причины которой у меня заняло немало времени и дабы не наступать на эти грабли снова, внимай же голосу моему.
Если ты по некой неосторожности датафилду с типом Float присвоишь значение NaN, то система тебе ничего не скажет плохого. Однако, когда ты скажешь датасету: "Post!", система встретит тебя ошибкой вида:
TSObjectLibrary.DBDataset: Error posting record. Original error message: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 20 (""): The supplied value is not a valid instance of data type float. Check the source data for invalid values. An example of an invalid value is data of numeric type with scale greater than precision
Эта ошибка возникает на стороне клиента, так что в профайлере ты ничего не увидешь.
Если ты, читатель, думаешь, что получить значение NaN очень сложно, то это не так. Достаточно написать:
var a = Dataset.Values('Subject');
var b = Dataset.Values('Divisor');
if (b != 0) {
Dataset.Values('Result') = a / b;
};
Уважаемый написавший сей код не затруднил себя проверить, что a и b неравны null и в итоге при некоторых обстоятельствах (когда второй операнд = null) получил NaN. (опытный читатель воскликнет, что надо было использовать ValAsFloat вместо Values).
Спасибо за внимание и до новых встреч в эфире.