powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Обновление DW из другого окна.
21 сообщений из 21, страница 1 из 1
Обновление DW из другого окна.
    #32778442
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открывается окно w_1 (response!). В нем есть dw_1, которое при открытии окнa заполняется данными. Из этого же окна можно вызвать еще одно окошко w_2 (response!). Здесь пользователь делает изменения в БД. Нужно, чтобы эти изменения были видны в окне w_1 (причем изменять нужно только те поля, в которых произошли изменения).
База данных - Access (AutoCommit = TRUE).

На кнопке cb_save в окне w_2 пишу:
DataWindowChild ldwc
... save...
IF IsValid(w_1) THEN
w_1.dw_1.GetChild('dddw_1', ldwc)
ldwc.SetTransObject(sqlca)
ldwc.Retrieve()
END IF
Не делает вообще никаких изменений.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32778645
Guest_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох и придумали же Вы, себе задачку.
Похоже, что "покой нам только снится.."

Открывайте свое второе окошко с параметром, в качестве которого передавайте ссылку на свое dw, что-то вроде openWithparm(w_2, dw_1)
В w_2:
- объявляете Instace Variable dataWindow i_dw
- в событии open проверяете и получаете переданную ссылку что-то вроде того
Код: plaintext
1.
2.
3.
4.
5.
6.
  ObjectParm   l_obj
  l_obj = message.PowerObjectParm
  if not isNull(l_obj) then
     if TypeOf(l_obj) = dataWindow! then
        i_dw = l_obj
     end if
   end if
- после чего делаете в своей кнопке cb_save, что угодно
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32780702
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest_2Ох и придумали же Вы, себе задачку.
Похоже, что "покой нам только снится.."

Открывайте свое второе окошко с параметром, в качестве которого передавайте ссылку на свое dw, что-то вроде openWithparm(w_2, dw_1)
В w_2:
- объявляете Instace Variable dataWindow i_dw
- в событии open проверяете и получаете переданную ссылку что-то вроде того
Код: plaintext
1.
2.
3.
4.
5.
6.
  ObjectParm   l_obj
  l_obj = message.PowerObjectParm
  if not isNull(l_obj) then
     if TypeOf(l_obj) = dataWindow! then
        i_dw = l_obj
     end if
   end if
- после чего делаете в своей кнопке cb_save, что угодно
К сожалению не помогло. Результат такой же. Какая-то проблема именно с обновлением, а не со связью с первым окном. Т.е. если написать в моем коде w_1.dw_1.Visible = FALSE, то dw_1 исчезнет.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32781508
Guest_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Логично, что если сделать: "w_1.dw_1.Visible = FALSE" , то "dw_1 исчезнет"

Если связь с dw_1 у Вас установлена и работает, то требуется, что бы Вы, внятно изложили свою проблему.

PS. Проблема не в связи, а в коде обновления, который выми не был приведен.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32781798
Alexander Kolotinets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Riska

В данном случае поможет shared datawindow .
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32783252
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял задачу, то в w_2 правится таблица справочник которая используется как DropDownDataWindow в первом окне?

Проблема скорее всего вот в этом:
Riska
База данных - Access (AutoCommit = TRUE).

попробуй сделать принудительный commit непосредственно перед
ldwc.SetTransObject(sqlca)
ldwc.Retrieve()

Кстати, если в главном DW (которое в w_1) для dddw_1 указана галочка AutoRetrive то повторный SetTransObject уже не обязателен.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32787102
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Kolotinets2Riska

В данном случае поможет shared datawindow .
В моем случае нельзя сделать shared datawindow
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32787115
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
попробуй сделать принудительный commit непосредственно перед
ldwc.SetTransObject(sqlca)
ldwc.Retrieve()
Если commit auto, то нет принуждения.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32787674
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska Alexander Kolotinets2Riska

В данном случае поможет shared datawindow .
В моем случае нельзя сделать shared datawindow

Почему?
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32789267
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп Riska Alexander Kolotinets2Riska

В данном случае поможет shared datawindow .
В моем случае нельзя сделать shared datawindow

Почему?
Нет никакой связи между этими двумя DW, кроме одного единственного поля. А в другом месте окна w_2 выполняется команда "update" вообще без применения DW. Скажем, что при открытии окна w_2 переменная а = а + 1. Теперь мне надо сохранить это изменение в базе данных (это работает нормально), а потом отобразить это изменение в w_1 (это работает, если я закрою окно w_1, а потом открою его опять. Но в данном случае я теряю все изменения, сделанные (но не сохраненные) в w_1 перед открытием окна w_2).
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32789956
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот это тогда Вы зачем привели?
Код: plaintext
1.
2.
3.
4.
IF IsValid(w_1) THEN 
    w_1.dw_1.GetChild('dddw_1', ldwc)
    ldwc.SetTransObject(sqlca)
    ldwc.Retrieve()
END IF
Перечитывание dropdowndatawindow прикрученного к column dddw_1
и то что изложено в 1117034 никак не согласуется.

Если shared нельзя то остается только по всем строкам w2 пройтись и для каждой колонки проверить GetItemStatus(...) и есть ли соответствующий column в w1. Ну и переносить GetItem/SetItem + установка SetItemStatus(NotModified!) в w1 чтобы оно не пыталось это значение еще раз в базу сохранить.
Короче - скучно не будет
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32790067
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейА вот это тогда Вы зачем привели?
Код: plaintext
1.
2.
3.
4.
IF IsValid(w_1) THEN 
    w_1.dw_1.GetChild('dddw_1', ldwc)
    ldwc.SetTransObject(sqlca)
    ldwc.Retrieve()
END IF
Перечитывание dropdowndatawindow прикрученного к column dddw_1
и то что изложено в 1117034 никак не согласуется.

Great minds think alike :-)

Только я собрался то же самое в более грубой форме, как ужо...
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32790250
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отож! у меня ж какая фора по времени относительно Массачусетцщины!
когда вы еще недавно проснулись, мы то ужо пообедали, соответственно добрее и спокойнее.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32794665
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз. Я, наверное, плохо объяснил. Открываем окно w_2. Делаем A = A + 1. Сохраняем в базе данных в том поле, которое отображает dddw_1 из окна w_1. Теперь нужно что-то сделать, чтобы значение A изменилось в dddw_1.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32794695
gerss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
  Open(w_2);
  dw_1.GetChild(...,dddw_1)  //Не вспомню сейчас точный синтаксис
  dddw_1.SetTransObject(SQLCA)
  dddw_1.Retrieve(...) //Если есть параметры

Поскольку w_2 - responce!, код после вызова Open() выполнится после того, как w_2 закроется, а следовательно, если в w_2 данные сохранены в БД, они будут зачитаны и появятся в dddw.

Сергей
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32794780
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так если надо значение в поле поменять - так и делайте SetItem.
Зачем dddw то из базы перечитывать?
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32798156
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gerss
Код: plaintext
1.
2.
3.
4.
  Open(w_2);
  dw_1.GetChild(...,dddw_1)  //Не вспомню сейчас точный синтаксис
  dddw_1.SetTransObject(SQLCA)
  dddw_1.Retrieve(...) //Если есть параметры

Поскольку w_2 - responce!, код после вызова Open() выполнится после того, как w_2 закроется, а следовательно, если в w_2 данные сохранены в БД, они будут зачитаны и появятся в dddw.

Сергей
Собственно, я с этого и начал. У меня этот код почему-то не работает.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32798376
alexis glinski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
It is good practice to test the success/failure code after calling GetChild function.
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32798584
gerss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska gerss
Код: plaintext
1.
2.
3.
4.
  Open(w_2);
  dw_1.GetChild(...,dddw_1)  //Не вспомню сейчас точный синтаксис
  dddw_1.SetTransObject(SQLCA)
  dddw_1.Retrieve(...) //Если есть параметры

Поскольку w_2 - responce!, код после вызова Open() выполнится после того, как w_2 закроется, а следовательно, если в w_2 данные сохранены в БД, они будут зачитаны и появятся в dddw.

Сергей
Собственно, я с этого и начал. У меня этот код почему-то не работает.

А что именно не работает? Может быть, после сохранения в БД нет COMMIT-а?
Или Update в w_2 проходит с ошибкой?
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32798621
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейТак если надо значение в поле поменять - так и делайте SetItem.
Зачем dddw то из базы перечитывать?

Riska, выше что-то непонятно?
...
Рейтинг: 0 / 0
Обновление DW из другого окна.
    #32802865
DDDW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы ж ретриваете drop-down (который если и изменился то изменился только лист содержащийся в нём) а значение-то у вас меняется в основном, я так понимаю. Ретривать надо главное dw, не drop-down (или оба если dddw тоже меняется). Или я чего-то упустил? Я думаю, что нет.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Обновление DW из другого окна.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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