Лишние ActiveX и SQL запрос

Вопросы, не попадающие в другие разделы.

Лишние ActiveX и SQL запрос

Сообщение TEVAS » Чт сен 20, 2012 2:51 pm

ВСЕМ ДОБРОЕ УТРО!
Наверное простой вопрос, но не могу разобраться быстро.
При импорте окон с ActiveX компонентами в пустой проект (AlarmViewer, AlmDBViewer и wwgenericsqlgrid) их имена изменились, я их снова переименовала по смыслу, и теперь, когда пишу скрипты и хочу произвести действия над этими объектами, в перечне ActiveX - компонентов стоят имена и старые, и новые. Всего у меня в проекте 3 элемента ActiveX, а в списке их в несколько раз больше! Может это и не должно мешать, но меня отвлекает..
Как оставить только действующие три элемента? Помогите пожалуйста! :)


Попробовала экспортировать окно в другой проект. По идее в моем проекте окон с ActiveX нет вообще.
Захожу в action любой кнопки, выбираю "выбрать ActiveX" в скрипте - открывается окно, а том целый перечень ActiveX элементов. Хотя их реально нет ни одного. Ерунда какая-то. Как избавиться от этого?

А по SQL вопрос такой: как правильно и где сформировать запрос к БД SQL. Я добавила на форму DTPicker и по событию Change я сохраняю значение во внутреннем теге. Хочу сформировать запрос типа

"SELECT [TransitionTime],[OperatorName],[CommentId] FROM [WWALMDB].[dbo].[AlarmDetail] WHERE [TransitionTime] < SEL_DATA" и не пойму, как мне его скрипт записать.
То есть, выбрала дату, нажала на кнопку, по которой выполняется этот запрос, и увидела в AlmDBView те алармы, которые удовлетворяют условию запроса.
Ничего совершенно не пойму про FilterFavoritesFile.
Вот из хелпа:

Свойство FilterFavoritesFile
Возвращает или устанавливает файл избранных фильтров Этот
файл используется в диалоговом окне Filter Favorites (Избранные
фильтры) для чтения или записи избранных фильтров
Тип
Строковый
Значение по умолчанию
Пусто (Null)
Синтаксис
Объект.FilterFavoritesFile [= строка]

Натолкните на мысль, дальше я разберусь.
Лучшее украшение жизни – хорошее настроение! ;-)
TEVAS
 
Сообщения: 89
Зарегистрирован: Пт июл 20, 2012 7:32 pm

Re: Лишние ActiveX и SQL запрос

Сообщение NewOrdered » Чт сен 20, 2012 9:23 pm

Попробуйте так:
Создайте кнопку и к ней привяжите Action Script.
Если используете контрол AlmDBView, то скрипт будет такой:
Код: Выделить всё
#AlmDbViewCtrl3.StartTime = #DTPickerDateStart.Month + "/" + #DTPickerDateStart.Day + "/" + #DTPickerDateStart.Year + " " + #DTPickerTimeStart.Hour + ":" + #DTPickerTimeStart.Minute + ":" + #DTPickerTimeStart.Second;

#AlmDbViewCtrl3.EndTime = #DTPickerDateEnd.Month + "/" + #DTPickerDateEnd.Day + "/" + #DTPickerDateEnd.Year + " " + #DTPickerTimeEnd.Hour + ":" + #DTPickerTimeEnd.Minute + ":" + #DTPickerTimeEnd.Second;

#AlmDbViewCtrl3.SpecificTime = 1;

#AlmDbViewCtrl3.Refresh();

Как видите, запрос явно в нем не формируется.
Если используете wwGenericSQLGrid, то тогда скрипт будет приблизительно такой:

Код: Выделить всё
#EventJournalGrid.SQLString = "SET DATEFORMAT dmy";
#EventJournalGrid.SQLAppend("SELECT EventStamp as Дата_и_время,");
#EventJournalGrid.SQLAppend("Description as Событие,");
#EventJournalGrid.SQLAppend("Value as Значение,");
#EventJournalGrid.SQLAppend("Area as Группа,");
#EventJournalGrid.SQLAppend("Priority as Приоритет,");
#EventJournalGrid.SQLAppend("Operator as Оператор");
#EventJournalGrid.SQLAppend("FROM wwalmdb.dbo.v_AlarmEventHistory");

{ФОРМИРОВАНИЕ ДАТЫ И ВРЕМЕНИ ЗАПРАШИВАЕМОГО ПЕРИОДА}
#EventJournalGrid.SQLAppend("WHERE (EventStamp BETWEEN '"+ #DateStart.Day + "/" + #DateStart.Month + "/" + #DateStart.Year + " " + #TimeStart.Hour + ":" + #TimeStart.Minute + ":" + #TimeStart.Second + "'");

#EventJournalGrid.SQLAppend("AND '" + #DateEnd.Day + "/" + #DateEnd.Month + "/" + #DateEnd.Year + " " + #TimeEnd.Hour + ":" + #TimeEnd.Minute + ":" + #TimeEnd.Second + "') ");
{здесь возможны дополнительные условия выборки}
#EventJournalGrid.Connect();
#EventJournalGrid.Execute();


Не забудьте заменить названия контролов на свои :)
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

Re: Лишние ActiveX и SQL запрос

Сообщение Генератор зла » Пт сен 21, 2012 12:32 pm

TEVAS писал(а):Ничего совершенно не пойму про FilterFavoritesFile.

AlarmDBViewControl.chm
Там всё есть. Попробуйте.
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: Лишние ActiveX и SQL запрос

Сообщение Генератор зла » Пт сен 21, 2012 12:35 pm

TEVAS писал(а):Как оставить только действующие три элемента?

Поиск по диску C:\ Файл OCX.INI
Там же находятся APPLIST.INI, WIZ.INI
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: Лишние ActiveX и SQL запрос

Сообщение TEVAS » Пт сен 21, 2012 6:29 pm

Спасибо! Запрос к AlmDBViewer'у работает.
А с объектом grid пока не выходит.
Работает вот такой запрос:

#GridSQL.SQLString = "SELECT dt, operator, comm FROM alarm_all WHERE (date_only < '17-09-2012')";
#GridSQL.Execute();

где dt, operator, comm - столбцы таблицы БД в PostGreSQL, а alarm_all - имя таблицы.

Если я начинаю вписывать дату через значения DTPicker'a, то не выходит.
Пишу так:

#GridSQL.SQLString = "SELECT dt,operator,comm FROM alarm_all WHERE (dt < '#GridStartData.Day+'-'+#GridStartData.Month+'-'+#GridStartData.Year' )";

Я подгоняю дату под формат '17-09-2012'. А месяц кстати возвращается, как 9, а не 09. И ноль дописывала в строку - не выходит. В чем моя ошибка??? :(
Лучшее украшение жизни – хорошее настроение! ;-)
TEVAS
 
Сообщения: 89
Зарегистрирован: Пт июл 20, 2012 7:32 pm

Re: Лишние ActiveX и SQL запрос

Сообщение NewOrdered » Пт сен 21, 2012 6:48 pm

TEVAS писал(а):Работает вот такой запрос:

#GridSQL.SQLString = "SELECT dt, operator, comm FROM alarm_all WHERE (date_only < '17-09-2012')";
#GridSQL.Execute();

где dt, operator, comm - столбцы таблицы БД в PostGreSQL, а alarm_all - имя таблицы.

Если я начинаю вписывать дату через значения DTPicker'a, то не выходит.
Пишу так:

#GridSQL.SQLString = "SELECT dt,operator,comm FROM alarm_all WHERE (dt < '#GridStartData.Day+'-'+#GridStartData.Month+'-'+#GridStartData.Year' )";

Я подгоняю дату под формат '17-09-2012'. А месяц кстати возвращается, как 9, а не 09. И ноль дописывала в строку - не выходит. В чем моя ошибка??? :(


В работающем запросе у вас date_only, а в неработающем dt - это так задумано?

Попробуйте вывести в отдельный Message-тэг вашу сборную конструкцию дата(+время, если необходимо) из ДТпикера.
Вопрос в том, чтобы ее формат совпадал с тем, что хранится в вашей БД.
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

Re: Лишние ActiveX и SQL запрос

Сообщение TEVAS » Пт сен 21, 2012 6:57 pm

ой, нет, везде dt.
и в проекте dt. Я здесь опечаталась.

Насчет конструкции:
я делала даже вот так:

DIM SD AS MESSAGE;
DIM SM AS MESSAGE;
DIM SY AS MESSAGE;
DIM STR AS MESSAGE;

SD= #GridStartData.Day;
SM= #GridStartData.Month;
SY=#GridStartData.Year;
STR = SD + "-"+"0"+SM +"-"+ SY;
SEL_DATA = STR;

#GridSQL.SQLString = "SELECT dt,operator,comm FROM alarm_all WHERE (dt < 'STR' )";

#GridSQL.Execute();

то есть, тег SEL_DATA на экране такой: 21-09-2012. Этот же формат даты, заключенный в одинарные кавычки, работает.
А 'STR' - не работает!! ( Почему?
Лучшее украшение жизни – хорошее настроение! ;-)
TEVAS
 
Сообщения: 89
Зарегистрирован: Пт июл 20, 2012 7:32 pm

Re: Лишние ActiveX и SQL запрос

Сообщение NewOrdered » Пт сен 21, 2012 7:01 pm

попробуйте вот так:
Код: Выделить всё
#GridSQL.SQLString = "SELECT dt,operator,comm FROM alarm_all WHERE (dt < '" + STR + "' )";
NewOrdered
 
Сообщения: 232
Зарегистрирован: Пн ноя 15, 2010 7:48 am
Откуда: Kaliningrad

Re: Лишние ActiveX и SQL запрос

Сообщение TEVAS » Пт сен 21, 2012 7:07 pm

NewOrdered писал(а):попробуйте вот так:
Код: Выделить всё
#GridSQL.SQLString = "SELECT dt,operator,comm FROM alarm_all WHERE (dt < '" + STR + "' )";


Вы представляете, я пробовала ' " + STR + " ' - то есть наоборот кавычки!! Я в хелпе видела подобное, вот:

WhereExpr = "Ser_No = ‘" +
Serial_input + "’";

поэтому и свое выражение заключала в кавычки так же! А наоборот, как вы предложили, ЗАРАБОТАЛО! )))))))))) Спасибо! Уже столько перекрутила вариантов, что в глазах двоится! )) :)

И кстати ноль дописывать к месяцу не надо, понимает и так!

Спасибо большое! :D
Лучшее украшение жизни – хорошее настроение! ;-)
TEVAS
 
Сообщения: 89
Зарегистрирован: Пт июл 20, 2012 7:32 pm

Re: Лишние ActiveX и SQL запрос

Сообщение TEVAS » Пт сен 21, 2012 7:48 pm

А насчет ActiveX вопрос открыт.
Вот так у меня выглядит вызов свойств объектов ActiveX из скрипта:

Изображение

В зеленой рамке - существующие в проекте объекты, а остальных нет! А имена их висят. Как убрать?

Генератор зла писал(а):
TEVAS писал(а):Как оставить только действующие три элемента?

Поиск по диску C:\ Файл OCX.INI
Там же находятся APPLIST.INI, WIZ.INI


Там перечислены все проекты на машине, все установленные компоненты. Я ничего оттуда не удаляла. Просто посмотрела.

Я не поняла честно говоря, что с этим всем делать.. :oops:
Лучшее украшение жизни – хорошее настроение! ;-)
TEVAS
 
Сообщения: 89
Зарегистрирован: Пт июл 20, 2012 7:32 pm

Re: Лишние ActiveX и SQL запрос

Сообщение Генератор зла » Пн сен 24, 2012 12:54 pm

TEVAS писал(а):Я не поняла честно говоря, что с этим всем делать..

Поправка:
Tech Note 160
How to Fix a Corrupted or Missing ITOCX.CFG File in InTouch

Wonderware® InTouch™ stores all of the ActveX control names that it uses in a file called ITOCX.CFG. If this file is corrupted or doesn't exist, the only way for InTouch to know the names of the ActiveX controls in your application is if the windows that contain the controls are open or are in memory.

Note When you create a new InTouch application, the ITOCX.CFG file is not automatically created. It is only created if you drop an ActiveX control onto one of your windows by selecting Wizards/ActiveX Controls.

Normally, in an InTouch application where the ITOCX.CFG file is not missing or corrupted, when you import a window that has an ActiveX control with a name that already exists, InTouch will automatically rename the imported ActiveX control. You should check the newly assigned name and change it if necessary. Also, note that only the name of the control will be changed; scripts that reference the original name will not be changed, so make sure you manually change the control name in your scripts.

On the other hand, if your ITOCX.CFG file is missing or corrupted and your windows with ActiveX controls are not open and are not in memory, InTouch will not know that you already have a control with the same name and it will not prompt you or change the name of the new ActiveX control. Because of that, you can end up with several ActiveX controls with identical names.

Here are some other symptoms of a missing or corrupted ITOCX.CFG file. (These symptoms assume that the windows with ActiveX controls are not open and are not in memory.)

When you select Insert/ActiveX to insert an ActiveX control into one of your scripts, the ActiveX Control Browser is empty. Then, if you open the windows that contain ActiveX controls, the ActiveX Control Browser will list the controls, even if you close the windows after that.
If you have an existing script that references one or more ActiveX controls and then you try to change the script or validate it, you get the following error:
"ControlName.Property" is a reference to an unknown or unregistered OCX

Solution

If you encounter any of the above symptoms because your ITOCX.CFG file was never created or because it is corrupted, you should do the following:

Drop an ActiveX control onto a window in your InTouch application.
Restart WindowMaker. This will recreate the ITOCX.CFG file.
Check all the ActiveX controls that you previously created or imported to verify that there aren't any duplicate names. At this point, should not experience any of the above symptoms.
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm


Вернуться в Другое

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

cron