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

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

СообщениеДобавлено: Чт сен 20, 2012 2:51 pm
TEVAS
ВСЕМ ДОБРОЕ УТРО!
Наверное простой вопрос, но не могу разобраться быстро.
При импорте окон с 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 [= строка]

Натолкните на мысль, дальше я разберусь.

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

СообщениеДобавлено: Чт сен 20, 2012 9:23 pm
NewOrdered
Попробуйте так:
Создайте кнопку и к ней привяжите 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();


Не забудьте заменить названия контролов на свои :)

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

СообщениеДобавлено: Пт сен 21, 2012 12:32 pm
Генератор зла
TEVAS писал(а):Ничего совершенно не пойму про FilterFavoritesFile.

AlarmDBViewControl.chm
Там всё есть. Попробуйте.

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

СообщениеДобавлено: Пт сен 21, 2012 12:35 pm
Генератор зла
TEVAS писал(а):Как оставить только действующие три элемента?

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

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

СообщениеДобавлено: Пт сен 21, 2012 6:29 pm
TEVAS
Спасибо! Запрос к 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. И ноль дописывала в строку - не выходит. В чем моя ошибка??? :(

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

СообщениеДобавлено: Пт сен 21, 2012 6:48 pm
NewOrdered
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-тэг вашу сборную конструкцию дата(+время, если необходимо) из ДТпикера.
Вопрос в том, чтобы ее формат совпадал с тем, что хранится в вашей БД.

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

СообщениеДобавлено: Пт сен 21, 2012 6:57 pm
TEVAS
ой, нет, везде 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' - не работает!! ( Почему?

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

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

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

СообщениеДобавлено: Пт сен 21, 2012 7:07 pm
TEVAS
NewOrdered писал(а):попробуйте вот так:
Код: Выделить всё
#GridSQL.SQLString = "SELECT dt,operator,comm FROM alarm_all WHERE (dt < '" + STR + "' )";


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

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

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

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

Спасибо большое! :D

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

СообщениеДобавлено: Пт сен 21, 2012 7:48 pm
TEVAS
А насчет ActiveX вопрос открыт.
Вот так у меня выглядит вызов свойств объектов ActiveX из скрипта:

Изображение

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

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

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


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

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

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.