Закрытие текущего открытого окна при переходе в другое окно в Power Builder

В настоящее время я использую powerbuilder 6.5. В своем приложении я хочу сделать код, в котором любое изменение в одном окне должно отражать другое окно. Два окна используют одну и ту же таблицу. если мы изменим в одном окне, это не отразится в другом окне, если другое окно было открыто раньше. Что я могу сделать?


person Shalma    schedule 01.07.2009    source источник


Ответы (3)


Возможно, вам будет полезно узнать немного больше о том, чего вы пытаетесь достичь. Оба окна открыты одновременно на экране одного пользователя? Или одно окно доступно одному пользователю, а второе просматривается отдельным пользователем, ожидающим обновления?

Сами по себе окна данных не будут извлекаться автоматически при обновлении базовой таблицы. На самом деле, если вы правильно настроили окна данных, правила обновления должны обеспечить некоторую защиту от параллелизма и не позволят второму dw обновить ту же таблицу после первого обновления. DataWindow2 обнаружит, что произошло изменение, и попытается предотвратить затирание изменений DataWindow1. Но опять же, это может не быть проблемой, если в вашем контексте второе окно доступно только для чтения.

Вы можете завершить обновление первого окна, а затем проверить существование второго окна и получить его. Еще лучше использовать невизуальный бизнес-объект в качестве промежуточного обработчика (а также держать неприятный код межоконной связи вне графического интерфейса). Когда обновление первого окна прошло успешно, оно сообщает бизнес-объекту, что оно выполнено, а затем объект может сообщить второму окну о необходимости извлечения. Но нужно будет сделать больше, если ваше второе окно будет обновляться.

person Bernard Dy    schedule 02.07.2009
comment
Проблема существует, когда оба окна открыты. Если второе окно закрыть одно, а если открыли, то видим обновления. Если оно уже открыто, мы не можем видеть обновления, пока не закроем и снова не откроем окно. Я новичок в сборщике энергии, пожалуйста, помогите мне. Я пытался получить каждый раз, когда в первом окне есть одно изменение, но он возвращает -1. - person Shalma; 02.07.2009
comment
Похоже, вы на правильном пути, но вам нужно решить проблему с Retrieve() = -1. Эран предложил возможные причины этого кода ошибки. Вы смотрели в него? - person Terry; 02.07.2009

Используйте метод ShareData окна данных, чтобы поделиться содержимым двух окон данных (вы имеете в виду окно данных, когда говорите таблицу, верно?).

Кстати, я сочувствую вам, что вам приходится использовать этого динозавра PB 6.5. OTOH, мы только что перешли с PB 10 на новенький PB 11.5, и у него худшая IDE, которую я когда-либо использовал. Мне, как программисту, стыдно видеть такое ужасное программное обеспечение. Sybase должно быть стыдно за себя, выпуская такой паршивый продукт.

person eran    schedule 01.07.2009
comment
Нет, я имел в виду только стол. Два окна используют разные окна данных, и для этих окон данных используется одна и та же таблица. Поэтому, если мы изменим в одном окне, это не отразится на другом окне, если оно открылось. - person Shalma; 01.07.2009
comment
Что ж, это ожидаемо. Окно данных связывается с БД с помощью методов Update и Retrieve. Если вы хотите, чтобы окно данных обновлялось в результате изменения БД, вы должны позаботиться об этом самостоятельно. В вашем случае это легко - просто повторно извлеките другой dw после обновления того, над которым вы работаете (или после фиксации, если вы используете другие транзакции). - person eran; 01.07.2009
comment
Я попытался получить окно данных, но оно возвращает -1, пожалуйста, совет - person Shalma; 01.07.2009
comment
Обычно это происходит, когда вы не устанавливаете допустимое окно данных в качестве источника данных или пропускаете вызов SetTransObject. Можете ли вы получить другое окно данных в любой момент или оно всегда терпит неудачу? - person eran; 01.07.2009
comment
честно - из мира MS - я нахожу устаревшую IDE PB немного грубой в использовании и предпочитаю VS IDE - я думаю, что с PB12 у нас будет намного лучшая IDE, поскольку она основана на VS2008. - person AndersK; 02.07.2009

@ Эран

Нет, я имел в виду только стол.

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

Поэтому, если мы изменим в одном окне, это не отразится на другом окне, если оно открылось.

person Shalma    schedule 01.07.2009