Импорт из базы данных

Компонент предназначен для импорта набора данных из СУБД. Созданный на базе данного компонента узел позволяет импортировать таблицу или представление из базы данных, либо результаты выполнения заданного пользователем SQL-запроса.

В тексте SQL-запроса можно использовать Управляющие переменные в качестве параметров и макроподстановок, что позволяет динамически формировать запрос, отправляемый на сервер.

Важно: для работы узла требуется предварительно создать подключение к базе данных и связать его с входным портом Подключение. Пример подключения и работы с БД.

Порты

Входные порты

  •  Подключение — принимает параметры подключения к базе данных;
  •  Управляющие переменные — (необязательный порт) переменными можно задать значения параметров мастера настройки.

Выходные порты

  •  Набор данных — таблица с импортированными данными.
  •  Статус выполнения — переменные выходного порта отображают текст ошибки (если ошибка возникла) и код завершения выполнения узла:
    • 0 — выполнение завершилось без ошибок;
    • 1 — ошибка при выполнении;
    • 2 — выполнение остановлено по тайм-ауту.

Мастер настройки

Мастер содержит несколько этапов настройки.

Шаг 1. Импорт из базы данных

На первом этапе настройки указываются следующие параметры:

  • Подключение — отображает строку подключения к источнику данных. Недоступно для редактирования.
  • Тип запроса — отображает какой именно тип запроса осуществляется:
    • Выбор таблицы — после установки переключателя в этом положении необходимо указать, из какого именно источника будет происходить импорт. Его нужно выбрать из выпадающего списка Таблица/Представление, в котором отобразятся все доступные варианты. В том случае, если подключение не активно, необходимо нажать кнопку Активировать.
    • SQL запрос — выбирается для настройки импорта данных при помощи языка SQL.
  • Игнорировать ошибки — при установленном флаге узел активируется успешно, даже если в процессе активации возникли ошибки.
  • Тайм-аут импорта (с) — устанавливает максимальное время на выполнение запроса к базе данных и получение данных из нее (время подключения к серверу БД в тайм-аут не входит). Тайм-аут импорта не распространяется на предварительный просмотр внутри мастера настройки. При срабатывании тайм-аута, в зависимости от этапа выполнения, останавливается выполнение запроса или заполнение выходного набора данных. Таким образом, в режиме выполнения узла «Игнорировать ошибки» выходной набор данных может оказаться частично заполненным.
  • Область настройки параметров извлечения данных из БД — зависит от выбранного типа запроса:
    • При типе запроса Выбор таблицы — в левой части области настройки Таблицы/представления отображаются таблицы подключенной базы данных. Для выбора определенной таблицы необходимо дважды нажать по ней левой кнопкой мыши, после чего в правой части отобразятся имена полей данной таблицы. Для импорта можно выбрать все поля сразу с помощью кнопки Извлекать всё или только нужные поля, проставив соответствующие флаги.
    • При типе запроса SQL запрос — в левой части Таблицы/представления отображаются таблицы подключенной базы данных и область для работы с переменными, которая по умолчанию скрыта внизу поля. В правой части задается текст SQL запроса к базе данных. При формировании запроса требуемые поля из левой части в правую можно переместить несколькими способами:
      • Перетащить мышью (Drag-and-drop) — по умолчанию перетаскивается непосредственное имя объекта, а при зажатой клавише CTRL — полное имя. Из таблицы с переменными по умолчанию перетаскивается параметр, а при зажатой клавише CTRL — макроподстановка.
      • Два раза щелкнуть левой кнопкой мыши по полю.
      • Вызвать контекстное меню нажатием правой кнопки мыши. Далее выбрать пункт Вставить имя в редактор SQL кода или Вставить полное имя в редактор SQL кода.

Кнопка Предпросмотр… позволяет оценить корректность запроса, отображая до 100 первых строк результирующей таблицы.

Шаг 2. Фильтрация данных

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

  • Отсутствует возможность фильтрации по номеру строки.
  • Отсутствует возможность получения списка уникальных значений для поля.
  • Для полей со строковым типом данных выполнимость опции Учитывать регистр зависит от СУБД, к которой настроено подключение. Например, в MS Access сравнение строк всегда производится без учета регистра.

Набор полей для фильтрации не зависит от выбранных на предыдущем шаге выходных колонок, так как при активации узла импорта условия фильтрации преобразуются в условия WHERE для результирующего SQL-запроса. То есть, как и в обычном SQL-запросе, в SELECT можно указать одни колонки, а фильтровать по другим.

Каждый раз, когда выполняется переход на шаг фильтрации данных, запрашивается информация о колонках, по которым можно фильтровать:

  • При неактивированном подключении к БД:

    • Если в рамках текущей сессии уже был настроен импорт из БД, то берутся поля из импортируемой ранее таблицы, для которых можно настроить фильтрацию.
    • Если нет колонок для фильтрации, то информация берется из настроенных условий фильтрации.
  • При активированном подключении к БД:

    • Колонки для фильтрации формируются на основе столбцов выбранной таблицы после выполнения запроса к БД.
    • Если во время выполнения запроса к БД произошла ошибка, то колонки, по которым можно фильтровать, остаются пустыми.

Данный этап настройки является необязательным. Поэтому при отсутствии условий фильтрации переход на следующую страницу в мастере осуществляется без ошибок и предупреждений.

Применение переменных в запросах

В SQL-запросах возможно два варианта использование переменных:

  • в качестве параметра — в переменной задается определенное значение. В тексте запроса параметр записывается со знаком двоеточие, например, :var1. При этом будет учитываться тип переменной, например строка будет обрамлена кавычками. Использовать параметры можно только в секции WHERE. Выбрать этот вариант использования можно в контекстном меню переменной.
  • в качестве подстановки — в значении переменной указывается SQL-запрос или какая-то его часть. В тексте запроса ее необходимо обрамлять знаками процента, например, %condition%. Выбрать этот вариант использования можно в контекстном меню переменной.

Примечание: если конструкция подстановки заключена в кавычки, то в приоритете работают кавычки, а не подстановка.

Пример:
SELECT * FROM %tables%
WHERE
   %cond1% :TitlePart
   AND Books.year > :MinYear
   AND Publisher.Name LIKE '%Media%'

, где

имя переменной тип значение для примера
tables строка Books JOIN Publisher ON Books.PubId = Pub.Id
cond1 строка title LIKE
TitlePart строка Приключен%
MinYear целое 2005
Media строка Астра-инфо

Здесь '%Media%' не является макроподстановкой, поэтому замена на значение переменной произведена не будет.

В результате будет сформирован следующий запрос:

SELECT * FROM Books JOIN Publisher ON Books.PubId = Pub.Id
WHERE
   title LIKE 'Приключен%'
   AND Books.year > 2005
   AND Publisher.Name LIKE '%Media%'