Показано с 1 по 7 из 7

Тема: SQL запросы в MS4D

  1. #1

    По умолчанию 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?)

    Спасибо
    Изображения Изображения
    Последний раз редактировалось AlexBut; 02.12.2024 в 04:18.

  2. #2

    По умолчанию

    Удалось считать данные из таблицы 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 в команду запроса вместо числа ?

    Спасибо
    Последний раз редактировалось AlexBut; 03.12.2024 в 06:27.

  3. #3

    По умолчанию

    Цитата Сообщение от AlexBut Посмотреть сообщение
    Удалось считать данные из таблицы 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:= ); !?

  4. #4

    По умолчанию

    Цитата Сообщение от Dorr Посмотреть сообщение
    Может с помощью CONCAT(IN1:= , IN2:= ); !?
    Я имею ввиду как подставить в команде запроса ,например, вместо source_time>=133511652266741142 параметр source_time>=oper_time
    ,а oper_time задавать в MS4D

  5. #5

    По умолчанию

    Цитата Сообщение от AlexBut Посмотреть сообщение
    Я имею ввиду как подставить в команде запроса ,например, вместо 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 - сам запрос

  6. #6

    По умолчанию

    Да, всё получилось.
    Т.е. читать могу и записывать( в команде запроса надо вместо числового значения вставить имя канала (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 )

  7. #7

    По умолчанию

    Кажется понял- archive_itemid(таблица data_raw ) это id в таблице items

Похожие темы

  1. Переход с MS4D 1.2 на MS4D 1.3
    от Hemann в разделе Master SCADA 4D
    Ответов: 8
    Последнее сообщение: 08.04.2023, 18:51
  2. get и post запросы
    от shatohingv в разделе ПЛК1хх [М02]
    Ответов: 0
    Последнее сообщение: 27.08.2020, 13:24
  3. СП3хх - групповые запросы к ПР
    от Серёга Букашкин в разделе Панели оператора (HMI)
    Ответов: 17
    Последнее сообщение: 10.08.2018, 10:39
  4. трм 101 простые запросы
    от nemo_1977 в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 25.01.2016, 13:25
  5. Как квитировать запросы в owen_io.dll?
    от kost2 в разделе Сетевые технологии
    Ответов: 1
    Последнее сообщение: 22.10.2013, 14:25

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •