Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » АСУТП »
Как извлечь данные из SQL в тэг InTouch?

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   Как извлечь данные из SQL в тэг InTouch?
Антон Николаевич
Junior Member

Сообщений: 1
Откуда: Норильск
Регистрация: Декабрь 2008

написано 01 Декабря 2008 13:14ИнфоПравкаОтветитьIP

Доброго времени суток уважаемые пользователи. Подскажите пожалуйста как извлечь данные из SQL в тэг InTouch? Необходимо сохранённые данные, допустим среднее значение расхода технологического газа, извлечь из таблицы MS SQL Server и присвоить данное значение какому-нибудь тэгу. Никак не могу понять как это делается. Читаю пояснения к функциям SQL Интача, но не приложу ума как сохранять именно в тэг. Я понял, что функцией SQL GetRecord, но в ней нельзя задать имя тэга. Подскажите пожалуйста.

Little_Cat
Junior Member

Сообщений: 19
Откуда: Одесса, Украина
Регистрация: Май 2008

написано 02 Декабря 2008 09:21ИнфоПравкаОтветитьIP

Эээ. Так можно для Селекта сделать через БиндЛист

SQLSelect() Function
The SQLSelect() function retrieves records from a table. When the script containing the SQLSelect() function is processed, the retrieved records are placed in a temporary Results Table in memory. These records can be browsed using the SQLFirst(), SQLLast(), SQLNext() and SQLPrev() functions.

Important Always call the SQLEnd() function after the script containing the SQLSelect() function ends to free memory used by the Results Table.

Category
SQL

Syntax
[ResultCode=]SQLSelect(ConnectionID,TableName, BindList,WhereExpr,OrderByExpression);

Arguments
ConnectionID

Name of a memory integer tag that holds the number (ID) assigned by the SQLConnect() function to each database connection.

TableName

Name of the database table to access.

BindList

Defines which InTouch tags are used and which database.

WhereExpr

Defines a condition that can be either true or false for any row of the table. The SQLSelect() function extracts data from only those rows in which the WhereExpr condition is true. The expression must be in the following format:

Определите сам БиндЛист в менеджере настройки и оперируйте ним.

Антон Николаевич
Junior Member

Сообщений: 2
Откуда: Норильск
Регистрация: Декабрь 2008

написано 04 Декабря 2008 07:29ИнфоПравкаОтветитьIP

Мне нужен только один тэг. То есть я предполагаю так, создаю представление (View) в SQL с одним параметром и потом через SQLSelect связываю это с тэгом? Вобщем я пытался проделать подобное, не получилось. Можно показать наглядный пример с кодом быстрой функции, может я чего не так делаю?

Добавление от 04 Декабря 2008 08:23:

Попробовал. Не получается. Тэг как был нулевым, так им и остался. Я даже отдельную выборку с одной строкой создал в SQL, но всё равно не получается...

Mechanic
Junior Member

Сообщений: 4
Откуда: Россия
Регистрация: Ноябрь 2008

написано 04 Декабря 2008 09:12ИнфоПравкаОтветитьIP

А использование InTouch дело принципиальное? Точнее, Вы хотите использовать InTouch только для решения этой задачи (обработка и визуализация данных из SQL)или просто нужно расширить возможности уже существующей на InTouch системы?

Антон Николаевич
Junior Member

Сообщений: 3
Откуда: Норильск
Регистрация: Декабрь 2008

написано 04 Декабря 2008 09:29ИнфоПравкаОтветитьIP

Расширить возможности. Есть существующая система, необходимо произвести именно такое действие. Причём это всего 2 параметра так необходимо сделать. Но никак не получается.

ColdFire
Member

Сообщений: 359
Откуда: Россия
Регистрация: Ноябрь 2004

написано 12 Декабря 2008 22:58ИнфоПравкаОтветитьIP

Работа с SQL (и не только с ним) в интаче сделана через жжирноое место.
Конкретно проблемы там в двух местах:
- биндлисты работают очень капризно (сделать запись через биндлисты у нас вообще не получилось, вывернулись через sqlexecute)
- ограничение с длиной строки в сто с небольшим символов - полный дохляк. сгенерить длинный sql-запрос таки можно. потом получить расширенное описание ошибки odbc - без шансов. в строковый тэг влезет только "odbd еггог в вашем приложении бла-бла-бла", и на самом интересном месте - где собственно начинается текст ошибки - строка режется.

Вам правильно написали - SQLSelect и вперед.
Собственно в примере и писать-то нечего. Определяете bindlist (связь поля из sql-таблицы с тэгами).

anahta
Junior Member

Сообщений: 1
Откуда: Россия, Томск
Регистрация: Ноябрь 2010

написано 10 Ноября 2010 07:18ИнфоПравкаОтветитьIP

Задание: Имеется удаленная машина, на которой установлен InSQL и создана таблица. Необходимо при нажатии кнопки в InTouch на другой машине извлекать из этой таблицы определенные поля таблицы в строках и записывать их в теги InTouch. Обе машины должны быть в одной подсети.
Решение: Запускаем установщик InTouch, в параметрах установки выбираем пункт SQLAccess. Устанавливаем. На этой же машине: Панель управления -> Администрирование -> Источники данных (ODBC) -> Системный DSN -> Добавить –> SQL Server: ввести отображаемое имя и IP удаленной машины. Подлинность: учетная запись SQL Server; получить параметры: ввести пользователя и пароль; использовать БД по умолчанию: Runtime. Проверить источник (тест связи).
Открыть InTouch, создать тег (например, MTR_TagValue), куда будут записываться значения, считываемые в цикле из таблицы InSQL.
Создать BindList. Создать внутренний тег, в котором будет храниться идентификатор коннекта с БД InSQL (например, DBConnID_SR_Batch). Создать внутренние теги, куда у нас будут записываться значения из таблицы.
В скрипте пишем:
SQLConnect( DBConnID_SR_Batch, "DSN=My-DSN;Database=Runtime;uid=wwAdmin;pwd=wwAdmin;"); {соединение с БД}
SQLSelect( DBConnID_SR_Batch, "v_AnalogLive", "MyBind", "TagName IN ('BS8_CHN', 'BS8_PA_OMNI_VOLTAGE', 'BS8_PA_SUPPLY_VOLTAGE', 'BS8_PA_TEMP', 'BS8_PA_VSWR', 'BS8_RPTR_RX_FREQ')", "" ); {выполнение SQL-запроса, в строку запроса помещается только 131 символ}
SQLFirst (DBConnID_SR_Batch); {указатель на первую строку таблицы}
DIM Loop AS INTEGER;
FOR Loop = 1 TO SQLNumRows(DBConnID_SR_Batch) {пока не кончились строки таблицы, считываем в том порядке, в котором происходил SELECT}
IF Loop == 1 THEN MTR_BS8_CHN = MTR_TagValue; ENDIF;
IF Loop == 2 THEN MTR_BS8_PA_OMNI_VOLTAGE = MTR_TagValue; ENDIF;
IF Loop == 3 THEN MTR_BS8_PA_SUPPLY_VOLTAGE = MTR_TagValue; ENDIF;
IF Loop == 4 THEN MTR_BS8_PA_TEMP = MTR_TagValue; ENDIF;
IF Loop == 5 THEN MTR_BS8_PA_VSWR = MTR_TagValue; ENDIF;
IF Loop == 6 THEN MTR_BS8_RPTR_RX_FREQ = MTR_TagValue; ENDIF;
IF Loop < SQLNumRows(DBConnID_SR_Batch) THEN {если не конец таблицы}
SQLNext( DBConnID_SR_Batch ); {указатель на следующую строку таблицы}
ENDIF;
NEXT;
SQLEnd(DBConnID_SR_Batch); {освобождение ресурсов}
SQLDisconnect(DBConnID_SR_Batch); {отключение соединения с БД}

если что, пишите anahta@mail.ru, вышлю инструкцию с скриншотами

ANY
Junior Member

Сообщений: 5
Откуда: Volgograd, RUSSIA
Регистрация: Июль 2012

написано 04 Декабря 2014 09:43ИнфоПравкаОтветитьIP

нашел по 10 версии, проверял в 9,5
" Далее приведены некоторые опытные наблюдения, которые были замечены в процессе настройки SQL-сервера и попыток подключения к нему из Wonderware InTouch:
1. Wonderware InTouch может подключаться к SQL-серверу только через удаленное соединение и не может через локальное. Плохо здесь то, что мы можем потерять в быстродействии, а хорошо, что сервер может быть расположен (установлен) на другом компьютере, что дает некоторую гибкость и удобство;
2. Подключиться к SQL-серверу из Wonderware InTouch можно, только если будет включен режим смешанной проверки подлинности пользователей, подключиться от имени текущего пользователя не удалось."
Проверял через Alarm DB Logger Manager - при указании в User Info текущего доменного пользователя у которого есть доступ к BD и таблице - ошибка, а при указании проверки пользователя SQL - есть connect.

Можно использовать
ResultCode = SQLConnect( ConnectionID, "DSN=myDSN; UID=user; PWD=password" );
Только плохо что "UID=user; PWD=password" - хранится в файле проекта (вер Intouch 9.5) в открытом виде.
Поэтому использую для подключения к MS SQL.
ResultCode = SQLConnect( ConnectionID, "DSN=myDSN; Trusted_Connection = Yes");

[Это сообщение изменил ANY (изменение 04 Декабря 2014 14:07).]

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика