В этой инструкции мы покажем, как использовать SQL в макросе для поиска или «фильтрации» записей в базе данных рецептов. Чтобы сэкономить время предположим, что база данных рецептов уже существует в вашем проекте.

Простой способ.

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

  1. В этом примере мы будем использовать компоненты рецепта под названием «Mixer», определенного ниже:

2. Самый простой способ «поиска» ключевой строки в рецепте - установить флажок "Filter enabled" (Фильтр включен) при создании объекта "New Recipe View" (Вид рецепта):

3. Если выбрана опция "Filter enabled" (Фильтр включен), то ключевое слово "Filter" можно ввести прямо над объектом просмотра:

4. Это ключевое слово будет фильтровать элементы рецепта и отображать только те, в которых есть совпадающие буквенно-цифровые строки.
Примечание: Эта функция будет находить совпадающие ключевые слова в каждом столбце.

Расширенный способ (через макрос):

1. В этом примере мы будем так же использовать компоненты рецепта под названием "Mixer", определенного ниже:

2. Для поиска в рецепте Mixer мы зададим макрос "search". Чтобы создать макрос, выберите значок "Macro" на вкладке проекта

3. Далее нажмите New

4. В рабочей области нашего макроса, прямо под командой «macro_command main()», мы определим три символьного массива char:
Примечание: обратите внимание: "SELECT * FROM" указывает на то, что мы выберем все элементы, возвращаемые этим запросом. Указывается имя рецепта «Mixer», затем «WHERE Code», который обозначает столбец «Code» нашего рецепта. «LIKE» - это оператор, используемый для обозначения определенного шаблона.

5. Для поиска определенного "Code" мы можем инициализировать переменную char нужным кодом, как показано ниже:
Примечание: '[6]' задает массив char длиной 6 символов.

6. Однако может оказаться более полезным получить переменную из регистра устройства. Для этого выберите кнопку «GET/SET FN...» в правом нижнем углу

7. В следующем окне выберите функцию «GetData» из раскрывающегося списка «Имя функции»

8. Настройте имя "Variable" и "Array index", который определяет, куда будут вставляться данные в этом массиве. Этот параметр можно оставить равным '0'. Затем задайте адрес «Read» и «Data count», которые должны быть эквивалентны длине вашего массива

9. Нажмите «Ok», чтобы добавить это утверждение в рабочую область макроса

10. Чтобы собрать запрос, нам нужно добавить нужную поисковую строку к оператору "sql". Это можно сделать с помощью функции «StringCat», как показано в этом примере:
Примечание: За именем переменной должен следовать индекс массива '[0]'. Приведенная ниже последовательность StringCat сформирует запрос, подобный «SELECT * FROM Mixer WHERE Code LIKE „%CODE%“», где CODE - некоторое значение, полученное из LW-0 в строке 8.

11. На предыдущем шаге мы формируем наш запрос, но для его отправки необходимо использовать команду «RecipeQuery», которая требует в качестве параметра массив char, состоящий из нашего запроса, а также короткое целое число, обозначающее количество найденных записей.
Примечание: Некоторые возможные типы данных в синтаксисе нашего макроса - char, short, int, float и long. Эти типы данных имеют длину 8, 16, 32, 32 и 64 бита соответственно.

12. После завершения работы мы можем проверить результат n_records, чтобы определить, совпадают ли какие-либо записи с нашей строкой поиска, используя оператор if

13. Чтобы разобрать каждую возвращенную запись, мы будем использовать оператор "For", функцию "RecipeGetData" и функцию "RecipeQueryGetRecordID", как показано в этом примере.
Примечание: "recordID" - это индекс возвращаемой записи. Мы получаем этот индекс с помощью функции "RecipeQueryGetRecordID", а затем используем его в функции "RecipeGetData" для определения получения данных из указанного столбца рецептов. Например, на 27-м примере мы получаем данные из столбца "Red" рецепта "Mixer" и присваиваем их первому элементу массива «rgb». Мы добавили операторы "SetData", чтобы продемонстрировать, как записи рецептов могут быть переданы в регистр устройства.

Примечание: Чтобы объявить команду "RecipeQueryGetRecordID" или "RecipeGetData", воспользуйтесь кнопкой "GET / SET FN...", как указано в шаге #6.

Для поиска целого числа, эквивалентного значению, содержащемуся в определенном столбце, используйте оператор "equals" перед именем столбца, как в строке 3. Затем целочисленное значение в формате "ASCII" можно присоединить к оператору запроса "sql" с помощью функции "StringCat"

Ранее просмотренные