Страница 1 из 1

Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Вт сен 06, 2016 2:42 pm
Diogen
Здравствуйте! Такой вопрос у меня возник. Отфильтровал я, по дате и приоритету записи об алармах. Получил вывод в AlarmDBLogger, могу ли я как то получить SQL запрос, которым AlarmDBLogger получил эти записи? Может функция какая то есть или еще что?

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Вт сен 06, 2016 3:50 pm
Генератор зла
Diogen писал(а):Получил вывод в AlarmDBLogger

Наверное, всё-аки в AlarmDBView Control.
Diogen писал(а):могу ли я как то получить SQL запрос, которым AlarmDBLogger получил эти записи?

AlarmDBView Control запрашивает БД. Посмотреть запрос можно попробовать по ПКМ на контроле и там что-нибудь связанное с Query. Либо ср-вами MSSQL

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Вт сен 06, 2016 6:54 pm
Diogen
Генератор зла писал(а):Наверное, всё-аки в AlarmDBView Control.

Да, конечно вы правы.
Генератор зла писал(а):AlarmDBView Control запрашивает БД. Посмотреть запрос можно попробовать по ПКМ на контроле и там что-нибудь связанное с Query. Либо ср-вами MSSQL

Не, мне не одноразово посмотреть надо, а чтобы в автоматическом режиме, нажал кнопку - применить фильтр, увидел записи и запрос, который эти записи выдергивает.

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Вт сен 06, 2016 9:01 pm
Генератор зла
Diogen писал(а):е, мне не одноразово посмотреть надо, а чтобы в автоматическом режиме, нажал кнопку - применить фильтр, увидел записи и запрос, который эти записи выдергивает.

Пишите свой контрол.

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Чт сен 08, 2016 2:53 pm
LexSL
Diogen писал(а):Получил вывод в AlarmDBLogger, могу ли я как то получить SQL запрос, которым AlarmDBLogger получил эти записи?

Сам в свое время задавался этим вопросом, на сервере запустил MS SQL Profiler и отловил запрос, итого:
1. Если AlarmDBView Control настроен на отображение только алармов, то запрос в базу WWALMDB идет следующий (запрос из представления (View) v_AlarmHistory2):
Код: Выделить всё
SELECT *,
DATEPART(yyyy, EventStamp) AS 'Year',
DATEPART(mm, EventStamp) AS 'Month',
DATEPART(dd, EventStamp) AS 'Day',
DATEPART(hh, EventStamp) AS 'Hour',
DATEPART(n, EventStamp) AS 'Minute',
DATEPART(s, EventStamp) AS 'Second' ,
DATEPART(yyyy, EventStampUTC) AS 'UTCYear',
DATEPART(mm, EventStampUTC) AS 'UTCMonth',
DATEPART(dd, EventStampUTC) AS 'UTCDay',
DATEPART(hh, EventStampUTC) AS 'UTCHour',
DATEPART(n, EventStampUTC) AS 'UTCMinute',
DATEPART(s, EventStamp) AS 'UTCSecond',
MilliSec AS 'UTCMilliSecond'
from  dbo.v_AlarmHistory2
WHERE ( EventStamp >='{0}' and EventStamp <= '{1}')
ORDER BY EventStampUTC DESC ,MilliSec DESC
   

{0} и {1} - это соответственно дата начала периода и дата конца (формат такой = 2001-01-31 00:00:01)

2. Если AlarmDBView Control настроен и на алармы и на события, то запрос идет в том же виде, только уже из представления v_AlarmEventHistory2.
3. Соответственно, события -> v_EventHistory

Фильтрация по группам алармов, соответственно в условие where пишется:
Код: Выделить всё
where (Area like N'%Группа%' and EventStamp >='{0}' and EventStamp <= '{1}')

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Чт сен 08, 2016 2:57 pm
Diogen
О, спасибо большое!

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Чт сен 08, 2016 5:23 pm
LexSL
Мне не понравился стандартный компонент AlarmDBView Control - имеется в виду, что у него настройка цветов для алармов и событий для меня была недостаточной
Вот пример, разбивка алармов по приоритетам:
150 - аварийные
300 - предупредительные
600 - нет связи
601 - неисправность устройства
602 - неисправность канала
Так вот, для ушедших алармов (UNACK_RTN, ACK_RTN) цвет текста и фона задается для всех приоритетов одновременно, т.е. непонятно - ушедший аларм было аварийным или предупредительным или каким другим. Конечно, в базу данных пишется поле Type = (HiHi, Hi и проч.), но отображать оператору эти "непонятные буковки" :) я не стал.
Поэтому написал приложение на WPF (использовал DataGrid и стили для отображения алармов разных приоритетов), а также отдельную хранимую процедуру в базе данных WWALMDB.

Код: Выделить всё
CREATE PROC [dbo].sp_AlarmsView
@StartDate datetime, @EndDate datetime
AS
 SET NOCOUNT ON;
SELECT wwAlmDb.*,
   TypeRus =
        case
        when (wwAlmDb.Priority >=1 AND wwAlmDb.Priority <=150) then N'Нарушение аварийной уставки'
        when (wwAlmDb.Priority >150 AND wwAlmDb.Priority <=300) then N'Нарушение предупредительной уставки'
        when (wwAlmDb.Priority = 600 ) then N'Нет связи'
        when (wwAlmDb.Priority = 601 ) then N'Неисправность устройства'
        when (wwAlmDb.Priority = 602 ) then N'Неисправность в измерительном канале'       
        when (wwAlmDb.Priority = 700 ) then N'Оборудование'               
        else type
        END,
        StateRus =
        case
        when (wwAlmDb.AlarmState = N'UNACK_ALM') then N'Пришло'
        when (wwAlmDb.AlarmState = N'UNACK_RTN') then N'Ушло (не снятым)'
         when (wwAlmDb.AlarmState = N'ACK_ALM') then N'Снятие тревоги'
         when (wwAlmDb.AlarmState = N'ACK_RTN') then N'Ушло (снятым)'
        else AlarmState
        end
FROM
  dbo.v_AlarmEventHistory2 wwAlmDb
where
wwAlmDb.EventStamp >= @StartDate and wwAlmDb.EventStamp < @EndDate
order by EventStamp desc

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Пт сен 09, 2016 12:39 am
Diogen
LexSL писал(а):Поэтому написал приложение на WPF (использовал DataGrid и стили для отображения алармов разных приоритетов)

А можно немного подробнее, с этого момента? Сам изучал ради интереса WPF, дошел до паттерна MVVM, вроде разобрался, что там и куда, для простых приложений, но для более сложного пришлось изучать фреймворки, на этом бросил. Объясните, хоть в двух словах примерно, как пишутся контролы для InTouch?

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Пт сен 09, 2016 4:42 pm
LexSL
Diogen писал(а):А можно немного подробнее, с этого момента?

Приложение написано на C# по технологии WPF, выглядит вот так:
AppAlarmDbView.png
(64.61 КБ) Скачиваний: 0

Как я уже писал, применены разные стили для разных алармов с разбивкой по приоритетам и статусу сообщения (пришло, ушло, ушло квитированным, ушло не квитированным)
Это достаточно просто делается в xaml - надо просто применять селектор шаблонов для строк в DataGrid.
Приложение использует данные, полученные из хранимой процедуры , текст которой я уже приводил...у меня правда она немного модифицирована, она дополнительно делает выборку из справочника тегов и выдает дополнительную информацию: где размещено устройство в "поле", описание параметра и проч.
Приложение как я сказал, совершенно отдельная сущность от Интача, запускается оператором по кнопке.

Свои контролы для Интача можно писать, мной проверено неоднократно, писать можно хоть на C++, C# под .Net 3.5.
вот ссылка , где я делился опытом создания
тынц

Re: Получить SQL запрос AlarmDBLogger'a

СообщениеДобавлено: Пт сен 09, 2016 8:25 pm
Diogen
Спасибо! Буду изучать.