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

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

Автор Тема: Поиск или сортировка в таблице с БД  (Прочитано 1065 раз)

Bill

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Добрый день !
Есть таблица рецептов c БД. Есть ли скрипт для поиска нужных технологии (или сортировка по строкам) ?
« Изменён: 08 Декабря 2021, 10:36:22 от Bill »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 153
    • Просмотр профиля
    • Simple-Scada
Re: Поиск или сортировка в таблице с БД
« Ответ #1 : 08 Декабря 2021, 13:19:31 »
Здравствуйте.
Для решения Вашей задачи, можно сформировать SQL-запрос так, чтобы он выбирал только нужные Вам данные и затем отобразить их в Таблице рецептов. Например, можно создать переменную "vrSearch" с типом "string" назначить ее полю, а на "OnDataChange" написать такой скрипт:

Код: (delphi)
begin
  if Sender is TM_Field then          // проверяем, что Sender это поле
    with Sender as TM_Field do

  tblRecipes.RunSQL('SELECT * FROM `recipes` WHERE `name` LIKE' + QuotedStr('%'+ AsStr +'%'), tsSaveFixRow);
end.
Данный SQL запрос будет делать выборку из БД с условием частичного совпадения в столбце "Имя рецепта" по введённому в поле тексту.

Также, с помощью SQL-запроса, можно выполнить сортировку данных, например:
Код: (delphi)
tblRecipes.RunSQL('SELECT * FROM `recipes` ORDER BY `name` ASC', tsSaveFixRow);  - данные выборки будут отсортированы в прямом порядке

tblRecipes.RunSQL('SELECT * FROM `recipes` ORDER BY `name` DESC', tsSaveFixRow); - данные выборки будут отсортированы в обратном порядке.
« Изменён: 08 Декабря 2021, 13:20:26 от Simple_Scada »

Bill

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Поиск или сортировка в таблице с БД
« Ответ #2 : 10 Декабря 2021, 07:39:27 »
Спасибо за ответ

sir

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Поиск или сортировка в таблице с БД
« Ответ #3 : 20 Декабря 2023, 13:58:41 »
А если Таблица формируется не из SQL базы, а из многих параметров переменных, постоянно изменяя свои значения, и писать-читать всю таблицу в SQL базу - ненужная нагрузка на сервер, да и вряд ли он справится в десятками записи-чтения данных в секунду. Как в этом случае организовать сортировку данных в таблице?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: Поиск или сортировка в таблице с БД
« Ответ #4 : 22 Декабря 2023, 11:11:08 »
Здравствуйте.

У таблицы нет каких-либо функций для сортировки данных. С доступными методами для работы с таблицей можно ознакомиться по ссылке.

pan2000

  • Постоялец
  • ***
  • Сообщений: 170
    • Просмотр профиля
Re: Поиск или сортировка в таблице с БД
« Ответ #5 : 23 Декабря 2023, 05:45:49 »
   Здравствуйте.

  Сортировка больших объёмов данных в скрипте требует большой затраты времени, что крайне не понравится серверу Simple-Scada. Процесс сортировки определяется алгоритмом и способом сравнения данных. Простые алгоритмы сортировки доступны в сети. Для таблицы данные представлены текстом, возможны следующие варианты сравнения данных:
- собственно сравнение текста для текстовых значений;
- для чисел - перевод текста в числовое значение с последующим сравнением;
- для чисел - выравнивание текстового представления "левыми" нулями по десятичной точке с последующим сравнением.

Во вложении пример сортировки перемешиванием (работа с индексами для сокращения количества обменов между ячейками таблицы) для тестовой таблицы из 8192 ячеек (для некоторых способов сравнения и 2000 много!), заполняемых убывающей последовательностью или случайной целочисленной или случайной вещественной.
Пример позволяет оценить время выполнения сортировки по количеству сортируемых данных и одному из трех способов сравнения. Фрагмент экрана показывает затраты времени на сортировку различными способами сравнения.

P.S. В общем случае (не зная задачи) можно предположительно облегчить жизнь серверу следующими вариантами:
- сортировка при поступлении очередного значения;
- разделение процесса сортировки на последовательное выполнение серии скриптов, сервер вздохнёт свободнее, но общее время сортировки возрастет по сравнению с односкриптовым вариантом;
- несколько таблиц (возможно неотображаемых) для разных диапазонов значений, по значению определяется нужная таблица, сортировка по каждой отдельной с последующим объединением таблиц.

P.P.S Для сравнения добавлена классическая сортировка перемешиванием с перемещением содержимого ячеек. На фрагменте экрана приведены времена сортировок по уже отсортированной таблице. Для классики первая сортировка "против шерсти" убывающей последовательности требует вдвое большего времени по сравнению с уже отсортированной последовательностью.
Впрочем в примере это видно нагляднее.
« Изменён: 23 Декабря 2023, 09:25:47 от pan2000 »

sir

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Поиск или сортировка в таблице с БД
« Ответ #6 : 24 Декабря 2023, 20:23:59 »
Спасибо! Очень ценная информация.
« Изменён: 24 Декабря 2023, 20:33:28 от Simple_Scada »