Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: SQL запрос в таблице и RowIndex  (Прочитано 1875 раз)

titanicnwa

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
SQL запрос в таблице и RowIndex
« : 26 Мая 2021, 10:40:28 »
При выделении строки в таблице и выполнении SQL-запроса для данной таблицы выделение не исчезает, а функция RowIndex возвращает -1
« Изменён: 30 Мая 2021, 21:51:13 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: SQL запрос в таблице и RowIndex
« Ответ #1 : 30 Мая 2021, 21:50:24 »
Здравствуйте.

Видимо Вы вызываете функцию RowIndex в скрипте, который не связан с клиентом. Начиная с версии 2.4.0.10 на каждом отдельном клиенте скады (или web-клиенте) можно выделять разные строки таблицы (выделение сохраняется при обновлении таблицы и при переходах по страницам проекта). Т.е. можно подключиться к проекту с двух клиентов и на первом клиенте выделить первую строку таблицы. И в то же время на втором клиенте скады выделить в этой же таблице вторую строку.
Поэтому функция RowIndex работает только в скриптах, вызов которых связан с каким-то конкретным клиентом (или web-клиентом). Например, в скриптах назначенных на следующие события:
OnClick (пользователь кликнул объект),
OnDblClick (пользователь дважды кликнул объект),
OnMouseUp (пользователь отпустил ЛКМ),
OnDoneInput (пользователь завершил ввод в поле),
OnCellClick (пользователь кликнул ячейку таблицы),
OnEnter (пользователь перешел на страницу),
OnLeave (пользователь покинул страницу),
OnSubpageEnter (пользователь перешел на подстраницу),
OnSubpageLeave (пользователь покинул подстраницу),
OnShow (окно было открыто на клиенте),
OnClose (окно было закрыто на клиенте);

В таких скриптах точно известно какой клиент их вызвал. Рассмотрим событие OnClick. Клиент кликает объект, сервер скады начинает выполнение скрипта OnClick и ему точно известно что его кликнул именно этот клиент. Поэтому вызов RowIndex вернёт индекс выделенной строки на этом клиенте.

При вызове RowIndex в скриптах которые выполняются сервером скады независимо от клиентов, функция всегда будет возвращать -1. Например, в скриптах на события OnDataChange, OnDataChangeEx, OnDoneSQL, "Запуск проекта", "Остановка проекта", "Выполнен SQL-запрос", "Прошла секунда", "Прошел час", "Отчет построен" и т.п. Для примера рассмотрим скрипт на событие "Прошла секунда". Скрипт будет выполняться сервером скады каждую секунду, даже когда к проекту не подключен ни один клиент. И вызов RowIndex в этом скрипте будет всегда возвращать -1, т.к. сервер не знает для какого именно клиента нужно вернуть индекс выделенной строки (а на каждом отдельном клиенте индекс может быть разным).

Мы забыли обновить описание функции RowIndex в руководстве после обновления 2.4.0.10. Исправим описание в ближайшее время. 
« Изменён: 30 Мая 2021, 21:52:51 от Simple-Scada »