Здравствуй, дорогой читатель.
В нашу редакцию часто приходят письма:
почему, если я создал FloatDataField (Поле с дробным значением) размером 15, сослал его на ConstColumn (Колонку-константу) с DataType (Типом данных) = Float (Дробное число) и заполнил это поле значением большим, чем 2147483647, я получаю ошибку
TSObjectLibrary.DBDataset: Invalid value for field '...'
Спешим ответить: причина в том, что ваше поле, независимо от указанных вами типов, было распознано как Integer (создан внутренний объект TField с типом значения Integer). Фокус в том, что тип поля для константных колонок определяется по начальному значению в этом поле, например:
если начальное значение NULL, то тип поля Integer;
если начальное значение '', то тип поля String;
если начальное значение 3 , то тип Integer;
если начальное значение 3,3 , то тип поля Float.
То же самое касается SQLTextColumn, в которых мы указываем константные значения.
Если хотим редактируемое дробное поле, которое ссылается на колонку-константу с пустым (нулевым) начальным значением, то единственный выход, который я вижу - это создать SQLTextColumn с значением 0.0 (дробный ConstColumn со значением 0,0 не проходит, т.к. значение преобразуется в 0 и поле снова считается Integer).