Есть 2 компьютера с TM 6.09 с одинаковыми проектами. Каждый подключается к одной и той же удаленной БД. Запросы к БД вида
code:
SELECT * FROM Table WHERE comp = 'comp1'
или
code:
SELECT * FROM Table WHERE comp = 'comp2'
Вопрос. Как подставить аргумент comp1 или comp2 в аргумент запроса. Напрашивается мысль, что должен быть файлик из которого эту строку можно прочитать. Как прочитать из файла в канал?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вариант 1. Самый общий случай. Использовать CALL.String и привязать соответствующий аргумент CALL.SQL к аргументу CALL.String. Значение этого аргумента можно менять в текстовом файле (см. описание канала CALL.String).
Вариант 2. Создать для канала CALL.SQL файл формата *.dat (см.описание атрибутов 128 и 129 канала CALL). В этом файле нужному строковому аргументу задать нужное значение. Организовать автоматическое подчитывание этого файла при запуске узла. Если количество символов в аргументе превышает 4, привязать аргумент к текстовому атрибуту, например, к КОММЕНТАРИЮ.
Posted by DmFM (Участник № / Member № 6479) on :
Пробую 1-й вариант. CALL.String из файла читает норамльно, в 1-й аргумент IN/OUT записывается "bsu".
Сделал CALL.SQLQuery
code:
SELECT txt #txt# FROM Table WHERE station = #station# ORDER BY id DESC
Два аргумента 1. txt | OUT | 2. station | IN | привязка к CALL.STRING аргументу в который пишется текст из файла
По задумке должен выполнять такой запрос
code:
SELECT txt FROM Table WHERE station = 'bsu' ORDER BY id DESC
Далее вывод поля txt в ГЭ "Текст из файла"
Не работает. А если заменить запрос на
code:
SELECT txt #txt# FROM Table ORDER BY id DESC
то работает.
Может кавычки не подставляются в строку station = #station#
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. WHERE station = #station#
д.б.
WHERE station = '#station#'
2. Надо проверить, что в аргументе CALL.SQL.station в реальном времени содержится именно то строковое выражение, которое Вы ожидаете.
3. Надо запустить трассировщик ODBC-драйвреа и посмотреть, как передается запрос и как выполняется.
4. "Далее вывод поля txt в ГЭ "Текст из файла"" - не понятно.
Posted by DmFM (Участник № / Member № 6479) on :
В аргументе CALL.SQL.station строка "bsu>", в CALL.String коорый читает из файла "bsu". Откуда то взялось ">".
Работает. Но в окне компоненты аргумент CALL.SQL.station показан как "bsu>", хотя в запрос передается "bsu"
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В "bsu>"
символ ">" указывает на привязку к аргументу, а не к атрибуту канала.
Собственно текстовая константа, используемая в CALL.SQL.station, будет "bsu".
Надо смотреть текст в трассировщике.
Можно задать значение аргумента CALL.SQL.station - строковой константой (без привязок аргумента) и проверить исполнение SQL-запроса.