Экспорт в БД — ("@val"): … is not a valid instance of data type

Стартовая страница Форумы Ошибки в работе Экспорт в БД — ("@val"): … is not a valid instance of data type

Просмотр 11 сообщений - с 1 по 11 (из 11 всего)
  • Автор
    Сообщения
  • #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 ....  

    но все ровно пишет ошибку.

    еще вопрос: как можно фильтровать, чтобы каналы со значением «не число» не попали в туда?

    #6904
    baur
    Участник

    ошибка никак не устраняется пока не отключаю (галочка не активный) канал, который выдает ошибку («не число»).

    Может в будущем поставить галочку «запись в БД» рядом с каналом прямо в Администраторе, чтобы не все каналы вломилась в скрипт по записи в БД или фильтровать каналы, которые выдает «не число» и тем самым сломает скрипт.

    • Этот ответ был изменен 6 лет, 7 месяцев назад от baur.
    #6916
    Mikhail
    Модератор

    Если нужно быстро решить проблему, то в формуле входного канала укажите double.IsNaN(Cnl) ? 0 : Cnl
    Если для канала уже есть какая-то формула, то такую проверку можно сделать в ней.

    Какой драйвер Коммуникатора работает с этим каналом, то есть какой драйвер создает эти «не числа»?

    Может в будущем поставить галочку «запись в БД» рядом с каналом прямо в Администраторе

    Лучше сохранять базу лёгкой и понятной, насколько это возможно, а специфические настройки делать в модулях.

    #6921
    baur
    Участник

    double.IsNaN(Cnl) ? 0 : Cnl

    да, как раз я получаю значение NAN, это ModbusRTU
    спасибо, проверю …

    #6940
    Mikhail
    Модератор

    Помню, что тоже сталкивался с подобной ситуацией, и было принято решение не избавляться от NaN на уровне драйвера, чтобы было понятно, что же на самом деле нам передаёт устройство. А на уровне формул проблема решается легко.

    #6966
    baur
    Участник

    А на уровне формул проблема решается легко.

    но, потенциально каждый канал может выдать NaN, как тут быть?

    и почему фильтр

    if (@cnlNum = 2361)
    insert into ....  

    не сработал?

    #6973
    Mikhail
    Модератор

    NaN может быть только в том случае, если его передаёт конкретное устройство по Модбас. Не все устройства передают NaN, зависит от того, как реализовал прошивку производитель.

    Полагаю, синтаксис фильтра не корректный, т.к. запрос не является блоком T/SQL. Лучше используйте вызов хранимых процедур из модуля экспорта, а них уже реализуйте нужную логику.

    #6979
    baur
    Участник

    Полагаю, синтаксис фильтра не корректный, т.к. запрос не является блоком

    фильтр работает, по крайней мере в БД записывает только те каналы.

    Лучше используйте вызов хранимых процедур из модуля экспорта, а них уже реализуйте нужную логику.

    Да, насчет хранимой процедуры я уже подумал об этом, передать val как varchar дальше уже конвертировать

    #6982
    Mikhail
    Модератор

    С хранимыми процедурами получается понятнее. Кроме того, в них можно писать логи и т.п.

    #7426
    baur
    Участник

    5.1.0.1 (25.09.2017)
    — Исправлена ошибка получения нулевых значений входных каналов при расчётах

    касается ли это к обсужденной теме?

    #7439
    Mikhail
    Модератор

    Это другая ошибка при использовании функции Val в формулах.
    Если будем с Вами дорабатывать модуль по Вашему ТЗ, то заодно устраним проблему из этой темы, либо программно, либо на уровне SQL.
    Вы не пробовали хранимые процедуры?

Просмотр 11 сообщений - с 1 по 11 (из 11 всего)
  • Вы должны авторизироваться для ответа в этой теме.