Стартовая страница › Форумы › Ошибки в работе › Экспорт в БД — ("@val"): … is not a valid instance of data type
- В этой теме 10 ответов, 2 участника, последнее обновление 8 лет, 2 месяца назад сделано
Mikhail.
-
АвторСообщения
-
04.08.2017 в 06:31 #6903
baurУчастникДобрый день,
вчера у меня остановился запись в БД с ошибкой:
2017-08-04 08:40:30 Ошибка при экспорте текущих данных в БД MSSQL — xx.xx.xx.xx: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 5 («@val»): 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.Смотрю через текущий срез, там значение канала «не число», это понятно, но по цепочке остановился запись и в остальные базы. Везде пишут эту же ошибку, хотя этот канал им уже не относится. Там даже явный фильтр:
if (@cnlNum = 2361) insert into ....но все ровно пишет ошибку.
еще вопрос: как можно фильтровать, чтобы каналы со значением «не число» не попали в туда?
04.08.2017 в 08:45 #6904
baurУчастникошибка никак не устраняется пока не отключаю (галочка не активный) канал, который выдает ошибку («не число»).
Может в будущем поставить галочку «запись в БД» рядом с каналом прямо в Администраторе, чтобы не все каналы вломилась в скрипт по записи в БД или фильтровать каналы, которые выдает «не число» и тем самым сломает скрипт.
-
Ответ изменён 8 лет, 4 месяца назад пользователем
baur.
04.08.2017 в 21:18 #6916
MikhailМодераторЕсли нужно быстро решить проблему, то в формуле входного канала укажите double.IsNaN(Cnl) ? 0 : Cnl
Если для канала уже есть какая-то формула, то такую проверку можно сделать в ней.Какой драйвер Коммуникатора работает с этим каналом, то есть какой драйвер создает эти «не числа»?
Может в будущем поставить галочку «запись в БД» рядом с каналом прямо в Администраторе
Лучше сохранять базу лёгкой и понятной, насколько это возможно, а специфические настройки делать в модулях.
05.08.2017 в 08:52 #6921
baurУчастникdouble.IsNaN(Cnl) ? 0 : Cnl
да, как раз я получаю значение NAN, это ModbusRTU
спасибо, проверю …07.08.2017 в 12:02 #6940
MikhailМодераторПомню, что тоже сталкивался с подобной ситуацией, и было принято решение не избавляться от NaN на уровне драйвера, чтобы было понятно, что же на самом деле нам передаёт устройство. А на уровне формул проблема решается легко.
08.08.2017 в 15:30 #6966
baurУчастникА на уровне формул проблема решается легко.
но, потенциально каждый канал может выдать NaN, как тут быть?
и почему фильтр
if (@cnlNum = 2361) insert into ....не сработал?
09.08.2017 в 10:50 #6973
MikhailМодераторNaN может быть только в том случае, если его передаёт конкретное устройство по Модбас. Не все устройства передают NaN, зависит от того, как реализовал прошивку производитель.
Полагаю, синтаксис фильтра не корректный, т.к. запрос не является блоком T/SQL. Лучше используйте вызов хранимых процедур из модуля экспорта, а них уже реализуйте нужную логику.
09.08.2017 в 12:32 #6979
baurУчастникПолагаю, синтаксис фильтра не корректный, т.к. запрос не является блоком
фильтр работает, по крайней мере в БД записывает только те каналы.
Лучше используйте вызов хранимых процедур из модуля экспорта, а них уже реализуйте нужную логику.
Да, насчет хранимой процедуры я уже подумал об этом, передать val как varchar дальше уже конвертировать
10.08.2017 в 09:27 #6982
MikhailМодераторС хранимыми процедурами получается понятнее. Кроме того, в них можно писать логи и т.п.
02.10.2017 в 07:43 #7426
baurУчастник5.1.0.1 (25.09.2017)
— Исправлена ошибка получения нулевых значений входных каналов при расчётахкасается ли это к обсужденной теме?
02.10.2017 в 12:55 #7439
MikhailМодераторЭто другая ошибка при использовании функции Val в формулах.
Если будем с Вами дорабатывать модуль по Вашему ТЗ, то заодно устраним проблему из этой темы, либо программно, либо на уровне SQL.
Вы не пробовали хранимые процедуры? -
Ответ изменён 8 лет, 4 месяца назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.