[BugWrong]
Размеры имени объекта OpenSCADA
Author |
Message |
Written on: 17. 12. 2013 [14:56]
|
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
|
Добрый день.
По документации
Имена объектов OpenSCADA ограничены размером в 50 символов и могут вводиться любыми символами.
Однако по факту встретил непонятную ситуацию: при создании объекта OpenSCADA возможно указать имя объекта более 50 символов.
Данное имя принимается, сохраняется и в дальнейшем считывается.
Однако при просмотре этого объекта (вкладки параметр и атрибуты) видим, что поле Name ограничено 50 символов, хотя выше указано имя этого же объекта, но с полной длиной.
[This article was edited 1 times, at last 17.12.2013 at 14:57.]
Attachment
|
Written on: 17. 12. 2013 [21:52]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"rxs5" wrote:
Имена объектов OpenSCADA ограничены размером в 50 символов и могут вводиться любыми символами.
Однако по факту встретил непонятную ситуацию: при создании объекта OpenSCADA возможно указать имя объекта более 50 символов.
И что с того, ввод он не ограничивает поскольку для имени это не критично, в отличии от ID.
"rxs5" wrote:
Данное имя принимается, сохраняется и в дальнейшем считывается.
Однако при просмотре этого объекта (вкладки параметр и атрибуты) видим, что поле Name ограничено 50 символов, хотя выше указано имя этого же объекта, но с полной длиной.
Не ограничивается оно нигде!
А 50 символов это размер поля в БД под имя и те БД, где эти лимиты строго соблюдается БД их и обрежет.
В общем, это не ошибка, поскольку нет функции прямых ограничений по вводу имени!
Learn, learn and learn better than work, work and work.
|
Written on: 18. 12. 2013 [13:22]
|
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
|
"roman" wrote:
Не ограничивается оно нигде!
А 50 символов это размер поля в БД под имя и те БД, где эти лимиты строго соблюдается БД их и обрежет.
В общем, это не ошибка, поскольку нет функции прямых ограничений по вводу имени!
Посмотрите, пожалуйста, скриншот в 1-м сообщении.
Выделенный параметр q1234567891234567890q1234567891234567891q1234567891234567892q1234567891234567893q123456789123456789...
во вкладке Parametr и Attributes обрезается, как минимум в визуальном представлении в поле Name до
q1234567891234567890q1234567891234567891q123456789
|
Written on: 18. 12. 2013 [16:34]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"rxs5" wrote:
во вкладке Parametr и Attributes обрезается, как минимум в визуальном представлении в поле Name до
q1234567891234567890q1234567891234567891q123456789
А, ну да, это у объекта TCfg() для поля "Имя" установлен лимит 50 символов и этот лимит используется при записи в БД (создания ячейки такого размера) и для уведомления валидатора конфигуратора.
Но это ничего не менят.
Learn, learn and learn better than work, work and work.
|
Written on: 18. 12. 2013 [17:17]
|
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
|
"roman" wrote:
А, ну да, это у объекта TCfg() для поля "Имя" установлен лимит 50 символов и этот лимит используется при записи в БД (создания ячейки такого размера) и для уведомления валидатора конфигуратора.
Но это ничего не менят.
Валидатор при вводе имени объекта отсутствует. Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов. Хотя все значение поля может быть прочитано из базы, и даже читается в заголовке страницы параметра.
Может у TCfg() снять лимит на 50 символов ? Иначе для правки имени с большим, чем 50 символов, нужно обращаться напрямую к базе и просматривать имя там или там редактировать ?
[This article was edited 1 times, at last 18.12.2013 at 17:37.]
|
Written on: 18. 12. 2013 [17:57]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"rxs5" wrote:
Валидатор при вводе имени объекта отсутствует.
Уточняйте, что в диалоге создания, где это будет слишком и Name не критичный, если его обрежет потом.
"rxs5" wrote:
Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов.
Да, сохраняется, поскольку там нет лимитированного типа char(N) и используется обычный "TEXT", а в MySQL и всех остальных есть и там обрежет.
"rxs5" wrote:
Может у TCfg() снять лимит на 50 символов ?
Каккой-то лимит быть должен, особенно если это одна строка. Кроме того смысл имени больше 50 символов мне не понятен, не говоря уже о проблемах такое имя увидеть целиком в некоторых элементах отображения, да хоть-бы и в дереве.
Learn, learn and learn better than work, work and work.
|
Written on: 18. 12. 2013 [18:35]
|
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
|
"roman" wrote:
"rxs5" wrote:
Валидатор при вводе имени объекта отсутствует.
Уточняйте, что в диалоге создания, где это будет слишком и Name не критичный, если его обрежет потом.
Согласен с уточнением.
"roman" wrote:
"rxs5" wrote:
Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов.
Да, сохраняется, поскольку там нет лимитированного типа char(N) и используется обычный "TEXT", а в MySQL и всех остальных есть и там обрежет.
Т.е. в SQL Lite исключительная ситуация, и ее можно использовать как недокументированное преимущество ?
"roman" wrote:
"rxs5" wrote:
Может у TCfg() снять лимит на 50 символов ?
Каккой-то лимит быть должен, особенно если это одна строка. Кроме того смысл имени больше 50 символов мне не понятен, не говоря уже о проблемах такое имя увидеть целиком в некоторых элементах отображения, да хоть-бы и в дереве.
По поступившим к нам требованиям имена получаются более 50 символов (60-70), соответственно ищем выход из ситуации. Вариант с ID отпадает. Остается увеличить емкость поля Name: или полностью официально, если это не приведет к сбоям других модулей, или используя особенность SQL Lite. Но тогда надо знать, с чем можем столкнуться в будущем.
|
Written on: 19. 12. 2013 [10:33]
|
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
|
"roman" wrote:
"rxs5" wrote:
Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов.
Да, сохраняется, поскольку там нет лимитированного типа char(N) и используется обычный "TEXT", а в MySQL и всех остальных есть и там обрежет.
Проверили для MySQL базы.
Параметр с именем размером более 50 символов создается, сохраняется в базе MySQL, считывается клиентов OPC UA и после перезагрузки OpenSCADA доступен. (скриншоты в сообщении)
Все же непонятно: есть реальное ограничение на имя в 50 символов, и оно будет обрезаться при хранении в базах данных кроме SQL Lite или размер значения поля Name ограничен 120 символами ?
[This article was edited 1 times, at last 19.12.2013 at 10:35.]
Attachment
screen2.png (File type: image/png, Size: 135.18 kilobytes) — 1834 downloads
screen3.png (File type: image/png, Size: 84.55 kilobytes) — 1861 downloads
screen4.png (File type: image/png, Size: 110.42 kilobytes) — 1988 downloads
|
Written on: 19. 12. 2013 [13:11]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"rxs5" wrote:
"roman" wrote:
"rxs5" wrote:
Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов.
Да, сохраняется, поскольку там нет лимитированного типа char(N) и используется обычный "TEXT", а в MySQL и всех остальных есть и там обрежет.
Проверили для MySQL базы.
Параметр с именем размером более 50 символов создается, сохраняется в базе MySQL, считывается клиентов OPC UA и после перезагрузки OpenSCADA доступен. (скриншоты в сообщении)
Это потому, что скопировали из SQLite, где информации о размере этого поля нет и как следствие в MySQL оно попало расширенное.
Если-бы таблица создавалась с самого начала то там оказалось бы varchar(50), и как следствие обрезало:
f( u_cfg.fld().len() < 256 || u_cfg.fld().flg()&TCfg::Key )
f_tp = "varchar("+TSYS::int2str(vmax(1,vmin((u_cfg.fld().flg()&TCfg::Key)?(333/(2*keyCnt)):255,u_cfg.fld().len())))+")";
Learn, learn and learn better than work, work and work.
|
Written on: 19. 12. 2013 [14:34]
|
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
|
Спасибо за пояснения. Вопрос снят в виду изменения максимального размера имени до необходимого и введения валидации.
[This article was edited 1 times, at last 19.12.2013 at 14:34.]
|
|
|