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

Выборка

СообщениеДобавлено: Пн окт 06, 2008 6:57 pm
Blaze
Требуется, чтобы Табло исторических алармов (AlmDbViewCtrl) отображал только данные за конкретный промежуток времени. Щелкать мышью на табло и вызывать контекстно меню нельзя.
Промежутки времени задаем вручную.
Подскажите кто-нибудь текст запроса (выдавать все алармы из базы от дата/время 1 до дата/время 2).

Re: Выборка

СообщениеДобавлено: Вт окт 07, 2008 7:49 am
FreeMan42
Blaze писал(а):Требуется, чтобы Табло исторических алармов (AlmDbViewCtrl) отображал только данные за конкретный промежуток времени. Щелкать мышью на табло и вызывать контекстно меню нельзя.
Промежутки времени задаем вручную.
Подскажите кто-нибудь текст запроса (выдавать все алармы из базы от дата/время 1 до дата/время 2).


Нужно просто поглядеть в свойства AlmDbViewCtrl (закладка Properties) там есть поля EndTime и StartTime (тип данных message) просто в поле Associated Tag укажи на переменные в базе, и потом просто ложи дату и время начала и конца.

Re: Выборка

СообщениеДобавлено: Вт окт 07, 2008 1:08 pm
Blaze
Ок, все работает.
Интересно, а нет ли в InTouch компонента, позволяющего удобно визуально выбирать время и число?

СообщениеДобавлено: Вт окт 07, 2008 2:25 pm
DoTT
Интересно, а нет ли в InTouch компонента, позволяющего удобно визуально выбирать время и число?
Компонента стандартного нет, но очень удобно использовать Актив-Х, называется он DateTimePicker или DateAndTimePicker.

СообщениеДобавлено: Вт окт 07, 2008 4:09 pm
Blaze
Не совсем удобно. Т.к. формат дат в компонентах не совпадает. Если же Piсker изменить формат, то отображаться он будет верно, а вот свойство Value не изменится (а ведь именно это свойство мы ассоциируем с тегом).
Если же изменить формат в AlmDbViewCtrl, то выборки вообще некорректно выполняются.

СообщениеДобавлено: Вт окт 07, 2008 5:35 pm
Blaze
Все, я написал скрипт, решающий проблему.

СообщениеДобавлено: Ср окт 08, 2008 7:46 am
FreeMan42
Blaze писал(а):Все, я написал скрипт, решающий проблему.

Ну поделись если нежалко.. может кому пригодится!

СообщениеДобавлено: Чт окт 09, 2008 8:10 pm
Blaze
В DTPicker выбираю формат Custom MM:dd:yyyy HH:mm:ss.
Time по умолчанию ставлю 00:00:01, иначе его сразу не будет видно.
Value в обоих компонентах присваиваю теги типа message (TimeBefore и TimeAfter).

В AlmDbViewCtrl ставлю галочку Use Specific Time, для EndTime и StartTime также присваиваю теги (TimeBefore_end и TimeAfter_end).

Для кнопки, выполняющей выбор пишу скрипт Action (сначала разбиваю строки на части и соединяю в другом порядке)
TimeB_1 = StringMid(TimeBefore, 1, 2);
TimeB_2 = StringMid(TimeBefore, 4, 2);
TimeB_3 = StringMid(TimeBefore, 7, 4);
IF StringLen(TimeBefore) == 19 THEN {* если кол-во часов - 2 цифры*}
TimeB_4 = StringMid(TimeBefore, 12, 2);
TimeB_5 = StringMid(TimeBefore, 15, 2);
TimeB_6 = StringMid(TimeBefore, 18, 2);
ELSE
IF StringLen(TimeBefore) == 18 THEN {* если кол-во часов - 1 цифра*}
TimeB_4 = "0" + StringMid(TimeBefore, 12, 1);
TimeB_5 = StringMid(TimeBefore, 14, 2);
TimeB_6 = StringMid(TimeBefore, 17, 2);
ENDIF;
ENDIF;

TimeA_1 = StringMid(TimeAfter, 1, 2);
TimeA_2 = StringMid(TimeAfter, 4, 2);
TimeA_3 = StringMid(TimeAfter, 7, 4);
IF StringLen(TimeAfter) == 19 THEN
TimeA_4 = StringMid(TimeAfter, 12, 2);
TimeA_5 = StringMid(TimeAfter, 15, 2);
TimeA_6 = StringMid(TimeAfter, 18, 2);
ELSE
IF StringLen(TimeAfter) == 18 THEN
TimeA_4 = "0" + StringMid(TimeAfter, 12, 1);
TimeA_5 = StringMid(TimeAfter, 14, 2);
TimeA_6 = StringMid(TimeAfter, 17, 2);
ENDIF;
ENDIF;

TimeBefore_end = TimeB_2 + "/" + TimeB_1 + "/" + TimeB_3 + " " + TimeB_4 + ":" + TimeB_5 + ":" + TimeB_6;
TimeAfter_end = TimeA_2 + "/" + TimeA_1 + "/" + TimeA_3 + " " + TimeA_4 + ":" + TimeA_5 + ":" + TimeA_6;

#AlmDbViewCtrl1.Refresh();

Т.к. галочка Use Specific Time стоит, то при Refresh происходит выборка.

Если ничего не забыл, то это все.