Просмотр полной версии : SQL запросы в MS4D
В СУБД Postgres Запрос:
SELECT value FROM public.data_raw where archive_itemid=907 and source_time=133511652266741142
выполняется и возвращает 3 строки(см скрин Запрос_Postgres_1.jpg) со значением 60000.
В тоже самое время в скада4D Запрос PostgreSQL 2 подобный (параметр команда запроса:
select value FROM public.data_raw where archive_itemid=907 and source_time=133511652266741142 )
тоже выполняется и возвращает тоже 3 строки но всегда нули, независимо от того какой тип я задаю параметру Базовый канал- Вход (array of LREAL или OF BYTE или ...).
(тип столбца value в таблице data_raw----double_precision) и сообщений об ошибках нет.(Кол-во возвращённых строк можно менять
меняя условие where и оно будет совпадать в СУБД и в СКАДА ).Не подскажете что делаю не так?
Ещё позвольте вопросы
-как вставить параметр вместо числа(например время в этом запросе)
-какое соответствие между data type в PostgreSQL и MS4D
(в таблице data_raw PostgreSQL типы: integer, bigint , double precision , text а какие типы им соответствуют в MS4D?)
Спасибо
Удалось считать данные из таблицы data_raw архива MS4D -
Объявил структуру в библиотеке :
TYPE Структура_1:
STRUCT
layer: INT := 0;
archive_itemid: INT := 0;
source_time: DT := DT#0001-01-01-00:00;
server_time: DT := DT#0001-01-01-00:00;
status_code: INT := 0;
value: LREAL := 0;
s_value: STRING;
END_STRUCT;
END_TYPE
В таблице data_raw это поля:
layer: integer
archive_itemid: integer
source_time: bigint
server_time: bigint
status_code: integer
value: double precision
s_value: text
И читает и забрасывает данные в Базовый канал запроса Вход тип ARRAY OF Структура_1
(Команда запроса: SELECT * FROM public.data_raw where archive_itemid=907 and source_time>=133511652266741142 order by source_time DESC)
Только не разобрался как подставить параметр из MS4D в команду запроса вместо числа ?
Спасибо
Удалось считать данные из таблицы data_raw архива MS4D -
Объявил структуру в библиотеке :
TYPE Структура_1:
STRUCT
layer: INT := 0;
archive_itemid: INT := 0;
source_time: DT := DT#0001-01-01-00:00;
server_time: DT := DT#0001-01-01-00:00;
status_code: INT := 0;
value: LREAL := 0;
s_value: STRING;
END_STRUCT;
END_TYPE
В таблице data_raw это поля:
layer: integer
archive_itemid: integer
source_time: bigint
server_time: bigint
status_code: integer
value: double precision
s_value: text
И читает и забрасывает данные в Базовый канал запроса Вход тип ARRAY OF Структура_1
(Команда запроса: SELECT * FROM public.data_raw where archive_itemid=907 and source_time>=133511652266741142 order by source_time DESC)
Только не разобрался как подставить параметр из MS4D в команду запроса вместо числа ?
Спасибо
Может с помощью CONCAT(IN1:= , IN2:= ); !?
Может с помощью CONCAT(IN1:= , IN2:= ); !?
Я имею ввиду как подставить в команде запроса ,например, вместо source_time>=133511652266741142 параметр source_time>=oper_time
,а oper_time задавать в MS4D
Я имею ввиду как подставить в команде запроса ,например, вместо source_time>=133511652266741142 параметр source_time>=oper_time
,а oper_time задавать в MS4D
Q := CONCAT(IN1:= 'SELECT * FROM public.data_raw where archive_itemid=907 and source_time>=', IN2:= '133511652266741142 ');
IN1 - const
IN2 - параметр, который можно задавать. Вынести в клеммник только
Q - сам запрос
Да, всё получилось.
Т.е. читать могу и записывать( в команде запроса надо вместо числового значения вставить имя канала (Output) в фигурных скобках
а к каналу привязать параметр из MS4D.Например:
SELECT * FROM public.data_raw where archive_itemid={AI_2} and source_time>={AI_1} order by source_time DESC
Только пока не понял где в архивной базе данных MS4D найти связь поля archive_itemid(таблица data_raw ) и имя параметра.
В таблице items есть имена и id (поля id ,project_id, itemid) но числа другие и не вижу связи с archive_itemid(таблица data_raw )
Кажется понял- archive_itemid(таблица data_raw ) это id в таблице items
Успешно читаю БД MS4D, но не могу прочитать БД datalogger_standalone УСПД Teleofis RTU202.
Поля таблицы channelparametercurrent следующие:
channelid bigint
code integer
name character_varying(255)
updatetime bigint
value character_varying(255)
(Есть ещё столбцы помеченные как системные tableold,cmax,xmax,cmin,xmin,tid)
создаю в MS4D структуру Структура_3:
channelid ulint
code int
name string
updatetime ulint
value string
соответсвенно протокол postgreSQL(к БД подключается), в нём простой запрос к таблице этой SELECT * FROM public.channelparametercurrent
(в запросе основной параметр той же структуры Структура_3) и ничего- ошибок не выдаёт но и не читает.
Может тип полей в Структуре_3 указал не тот, может в Структуру_3 надо включить и системные столбцы таблицы?
Кто-нибудь подскажет?
всё решил - была проблема подключения в сети к БД, хотя пинги были, но SQL запросы не проходили так и не понял почему но сейчас работает
МихаилГл
04.03.2025, 16:48
всё решил - была проблема подключения в сети к БД, хотя пинги были, но SQL запросы не проходили так и не понял почему но сейчас работает
Может порт был закрыт, а вы потом файрволл отключили, или еще что. Пинг может идти и при закрытых портах. Для mssql это 1432 и 1433 например.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot