В этой инструкции мы покажем, как использовать SQL в макросе для поиска или «фильтрации» записей в базе данных рецептов. Чтобы сэкономить время предположим, что база данных рецептов уже существует в вашем проекте.
Простой способ.
Этот метод подходит для тех, кто хочет предоставить операторам эффективный способ поиска в записях рецептов. Он не подходит для ситуаций, когда необходимо выполнить поиск в конкретном столбце, проверить запись или использовать его как средство получения, обработки и распространения полученных результатов.
- В этом примере мы будем использовать компоненты рецепта под названием «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"