powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Ребята подскажите с TRY CATCH END TRY плиз.
11 сообщений из 11, страница 1 из 1
Ребята подскажите с TRY CATCH END TRY плиз.
    #34064878
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как-то никак не могу въехать что к чему.

Такое дело, в базу данных сохраняетса dw_1.Object.DataWindow.Syntax

(DW Грид)

каждый раз когда юзверь открывает репорт, я проверяю изменилась ли процедура для етого репорта в базе данных, т.е. были ли убраны, добавлены колонки, изменён порядок возврата или имена этих колонок в селекте.

Eсли нет, гружу репорт в таком виде как его сохранили в последнуй раз.

Eсли изменён, делаю абракодабру на базе процедуры строю новое datawindow (шобы не было там всяких invalid column мессаджей и т.д.) a на базе "старого" синтакса окна редактирую layouts.

Всё работает как положено, но вот такая закавыка:
a. Юзверь сохранил окно с фильтром "association_id <> 99"
b. Кто-то изменил процедуру и убрал колонку association_id из селекта.
c. перед построением нового окна я сохраняю s_old_filter из старого синтакса
d. Строю окно
е. Пытаюсь добавить на него s_old_filter

IF NOT IsNull(s_s_old_filter) and Len(s_s_old_filter) > 1 THEN
i_rc = dw_1.SetFilter(s_filter) //i_rc, -1 не возвращает ...

IF i_rc = 1 THEN
i_rc = dw_1.Filter() //i_rc, -1 опять не возвращает ...
END IF

IF i_rc <> 1 THEN
MessageBox(This.Title, 'Unable to set Report Filter.', Exclamation!)
END IF
END IF

В ре3ультате юзверь не знает что фильтра там уже нет, хотя если он нажмёт кнопку FILTER с кодом:

string s_null
setnull(s_null)

IF dw_1.SetFilter(s_null) = 1 THEN
dw_1.Filter()
END IF

открываетса expression в котором написано "association_id <> 99"
жмём кнопку validate, получаем invalid expression.

вообшем ботва.

Пробуем s_old_filter = dw_1.Modify('DataWindow.Table.Filter="' + s_old_filter + '"')

s_old_filter возвращает "" типа "all good" но вываливаетса datawindow error messagebox с "invalid expression"

Как бы мне ето дело поймать, убрать и предупредить.
я тут наткнулся на TRY CATCH END TRY

что-то типа:
try
s_filter = dw_1.Modify('DataWindow.Table.Filter="' + s_filter + '"')

catch (DWRuntimeError myDWError)


end try

хотя явно, я понятия пока не имею шо я делаю.
Буду благодарен за помошь.

спасиба.
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34064951
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в аналогичном случае - модификация SQLSelect,Modify или Create(syntax) - сначала провожу все операции на локально доступном datastore. Если в синтаксисе проявляются ошибки - то никаких event-ов y datastore не срабатывает, просто возврат строки с описанием ошибки.
А потом можно через Get/SetFullState можно перенести все в datawindow
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34065031
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronkЯ как-то никак не могу въехать что к чему.
Пробуем s_old_filter = dw_1.Modify('DataWindow.Table.Filter="' + s_old_filter + '"')

s_old_filter возвращает "" типа "all good" но вываливаетса datawindow error messagebox с "invalid expression"

Как бы мне ето дело поймать, убрать и предупредить.
я тут наткнулся на TRY CATCH END TRY...
Не надо никаких TRY CATCH END TRY
Попробуй это:
Код: plaintext
1.
2.
dw_1.Modify("DataWindow.NoUserPrompt='yes'")
s_old_filter = dw_1.Modify('DataWindow.Table.Filter="' + s_old_filter + '"')
dw_1.Modify("DataWindow.NoUserPrompt='no'")
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34065057
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп, большое спасибо.
То что доктор прописал, всё работает.
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34065104
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, немного поторопился.

/* кондиции:
сохранённый фильтр "association_id<>99" в старом окне,
в новом окне колонки association_id - НЕТ поэтому и фильтра такого существовать не должно. */

s_filter = старое_окно.Object.DataWindow.Table.Filter
....
код, код, код ...
....

новое_окно.Modify("DataWindow.NoUserPrompt='yes'")
новое_окно_1.Object.DataWindow.Table.Filter = s_filter
новое_окно.Modify("DataWindow.NoUserPrompt='no'")

Код ошибки не даёт, но добавляет в новое_окно, в проперти filter "association_id<>99".

мне надо, если колонка отсутсвует:
а. в новое_окно в проперти filter "association_id<>99" не добавлять
б. оповестить юзверя, что фильтр "association_id<>99", сохранённый в старое_окно, более не существует.
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34065223
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronkEсли изменён, делаю абракодабру на базе процедуры строю новое datawindow (шобы не было там всяких invalid column мессаджей и т.д.) a на базе "старого" синтакса окна редактирую layouts.

Всё работает как положено, но вот такая закавыка:
a. Юзверь сохранил окно с фильтром "association_id <> 99"
b. Кто-то изменил процедуру и убрал колонку association_id из селекта.
c. перед построением нового окна я сохраняю s_old_filter из старого синтакса
Убрать пункт c.
Иначе тебе придёться парсать s_old_filter на предмет наличия колонок упомянутых в нём в новом синтаксе, что есть неблагодарная (и подверженная ошибкам) задача...
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34065238
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу комрад.
Прийдётса что-то выкручивать.
У клиентов есть по сотне одинаково-сохранённых репортов но с разными фильтрами и сортами.
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34065447
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я думаю, что для начала проверить количество колонок, чтобы найти явное несоответствие или попробовать сделать sql-запрос извлеченный из dw (как раз ошибка колонки и вылезет)
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34067754
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
voronkНе могу комрад.
Прийдётса что-то выкручивать.
У клиентов есть по сотне одинаково-сохранённых репортов но с разными фильтрами и сортами.
Странно, в 9.0.3.8614 SetFilter ошибку возвращает.
Выражение можно проверить при помощи Find или Describe('Evaluate...
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34068166
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9.0.2 7610 нет.

как можно проверить фильтр типа: isNull( tax_id ) and amount >= 1000 and
(upper(Right(first_name, 2)) = 'TH' or UPPER(left( first_name, 5)) <> 'MICHA') например если колонок tax_id, first_name больше нет.


Oleg1
Странно, в 9.0.3.8614 SetFilter ошибку возвращает.
Выражение можно проверить при помощи Find или Describe ('Evaluate...
...
Рейтинг: 0 / 0
Ребята подскажите с TRY CATCH END TRY плиз.
    #34070779
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо.
11 билдер ошибку возврашает.
Так как с девятки мы будем прыгать сразу на него, то и вопрос больше не стоит.

ПеСе
11, заколбасил нашу аппликацию через .NET WEB Forms Application Wizard на тестировочный сервак ... работает.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Ребята подскажите с TRY CATCH END TRY плиз.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]