powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как происходит связывание информации в двух DW через retrieval argument?
13 сообщений из 13, страница 1 из 1
Как происходит связывание информации в двух DW через retrieval argument?
    #39359299
Apprehension
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Заранее извиняюсь за базовые вопросы и некоторый сумбур. Я - полный новичок, читаю и разбираюсь в учебной БД по книге Getting Started, поставляемой с PowerBuilder 10.5.

Там строится стандартная система из обычного окна, на котором расположены два DW, чьи DW-объекты получают данные из одной таблицы. Первый DW-объект имеет табличное представление, второй - Freeform, так что при навигации по первому DW во втором должны сменяться данные, отображая их более детально. И они сменяются! Хотя я никак не пойму, как это удалось сделать...

В SQL, который поставляет данные для второго, детального DW, определен retrieval argument (по ключевому полю таблицы). Но я не пойму, где я успел установить связь этого аргумента с перемещением по первому DW. Скажем, в Lazarus надо было бы написать скрипт для события перемещения по первому окну, где отслеживалось бы значение ключевого поля, потом оно присваивалось бы retrieval argument и подавалась команда на обновление второго окна.

Здесь я только прочитал фразу: "When you put this DataWindow object into the tutorial application, you write a script that passes the required argument to the DataWindow automatically".
(Вначале понял как "Когда вы помещаете этот DW-объект [объект с retrieval argument] в учебное приложение, вы пишете скрипт, который передает требуемый аргумент объекту DW автоматически".)

Перерыл весь пример - не вижу, где этот аргумент устанавливается и где я писал этот скрипт... Может, речь идет о том, что это скрипт пишется АВТОМАТИЧЕСКИ, при помещении объекта в приложение?

Я в некоторой растерянности…
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359310
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apprehension
Перерыл весь пример - не вижу, где этот аргумент устанавливается и где я писал этот скрипт... Может, речь идет о том, что это скрипт пишется АВТОМАТИЧЕСКИ, при помещении объекта в приложение?

Я в некоторой растерянности…

Пересмотрев магический шар могу предположить

1. при загрузке окна ( событие open ) устанавливается связь между двумя ДВ типа

dw_form.shareData(dw_list)
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359315
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pand,

вариант 2

при смене строки в списке ( событие rowfocuschanged )
есть строка обновления формы
dw_form.Retrieve( object.key_id[newrow] )


дальше магический шар запотел . Больше ничего не вижу.
Сейчас Dim2000 до рун доберется - точнее расскажет .


P.S. Приводите хотябы обрывки кода который пишете
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359321
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apprehension
В SQL, который поставляет данные для второго, детального DW, определен retrieval argument (по ключевому полю таблицы).

значит всетаки втрой вариант

ApprehensionНо я не пойму, где я успел установить связь этого аргумента с перемещением по первому DW.
Перерыл весь пример - не вижу, где этот аргумент устанавливается и где я писал этот скрипт... Может, речь идет о том, что это скрипт пишется АВТОМАТИЧЕСКИ, при помещении объекта в приложение?

Я в некоторой растерянности…
Автоматически билдер , насколько мне помнится ничего не пишет.
Что Вы могли написать ..... может кто-то из присутствующух и расскажет , мне сложно .
Есть еще вариант если Вы используете библиотеку pfc и при открытии окна
инициализируете сервис Linkage
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359333
Apprehension
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что я выдрал (функции и события окошка, в котором расположены эти два Dw):
dw_master -- DW с табличным объектом
dw_detail -- DW с freeform-объектом ("ленточным"?), где выводится детальная информация только по одной строке таблицы.

КЛАСС: w_master_detail_ancestor [w_pbtutor_basesheet]


СОБЫТИЕ: open() returns long [pbm_open]

dw_master.settransobject( sqlca )
dw_detail.settransobject( sqlca )
this. EVENT ue_retrieve()

(ЕСТЬ СОБЫТИЕ ПРЕДКА, но там нет ничего, связанного с ДВ)

СОБЫТИЕ: ue_retrieve()
IF dw_master.Retrieve() <> -1 THEN
dw_master.SetFocus()
dw_master.SetRowFocusIndicator(Hand!)
END IF

СОБЫТИЕ: ue_insert()
dw_detail.Reset( )
dw_detail.InsertRow(0)
dw_detail.SetFocus( )

СОБЫТИЕ: ue_update()
IF dw_detail.update( ) = 1 then
COMMIT using SQLCA;
MessageBox("Save", "Save succeeded")
else
ROLLBACK using SQLCA;
end if

СОБЫТИЕ: ue_delete()
dw_detail.DeleteRow( 0 )

[Очевидно, последнее событие написано с ошибкой, поскольку программа вела себя не так, как заявлено. Считаю, что правильно dw_master.DeleteRow( 0 ) ]

Собственно, вот и все, что я нашел.
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359346
Apprehension
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, сами DW нестандартные - они берутся из библиотеки, поставляемой в дистрибутиве специально для примера, но их новый функционал ограничивается только обработкой ошибок (нас, нубов, учат вначале при ошибке закрывать текущую транзакцию, а уж потом сообщать пользователю плохие новости :)
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359414
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apprehension,

dw_master
dw_detail
унаследованы с окна w_pbtutor_basesheet или созданы на текущем окне
если унаследованы то смотри события окна w_pbtutor_basesheet
скорее всего поведение dw описаны в нем
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359435
Apprehension
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДВ-шки dw_master и dw_detail нестандартные и унаследованы от пользовательского класса u_dwstandard, определенного в библиотеке, которая поставляется на дистрибутиве как часть обучалки.
Но в этом классе переопределены только некоторые события обработки ошибок

Пример:
СОБЫТИЕ: dberror(...)
this.EVENT uevent_dberr_initial()
this.POST EVENT uevent_dberr_message &
(sqldbcode,sqlerrtext,row,buffer)
RETURN 1

uevent_dberr_initial пока не заполнены (будут дальше по обучалке, судя по всему, в нем мы закроем транзакцию), а uevent_dberr_message просто выводит сообщение.

Так что и тут я ничего не нашел... Сам класс u_dwstandard унаследован от datawindow.

Может, у кого-то есть похожие обучалки? ^__^ Илия просто не там смотрел? :(
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359457
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
02.12.2016 13:34, Apprehension пишет:

> Скажем, в Lazarus надо было бы написать скрипт для события перемещения
> по первому окну, где отслеживалось бы значение ключевого поля, потом оно
> присваивалось бы retrieval argument и подавалась команда на обновление
> второго окна.

Здесь самый очевидный вариант выглядит примерно так же :).

> Перерыл весь пример - не вижу, где этот аргумент устанавливается и где я
> писал этот скрипт... Может, речь идет о том, что это скрипт пишется
> АВТОМАТИЧЕСКИ, при помещении объекта в приложение?

Эхотаг сам ничего не пишет :).

Я бы начала с поиска места, где вызывается dw_detail.Retrieve(). Просто
поиском по всему проекту.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39359459
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pand1. при загрузке окна ( событие open ) устанавливается связь между двумя ДВ типа

dw_form.shareData(dw_list)pandвариант 2

при смене строки в списке ( событие rowfocuschanged )
есть строка обновления формы
dw_form.Retrieve( object.key_id[newrow] )
Если вычеркнуть пункт "связь через астрал", то так оно и есть :).

pandСейчас Dim2000 до рун доберется - точнее расскажет
Я бы, может, и рассказал, если бы хоть раз видел этот самый тьюториал ;).
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39360135
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставить точку останова в событии retrieveend. Если не на что поставить - внести туда выражение типа i= 1. Запустить под дебагером.
Проверить call stack ( стек вызова ). Там должна быть видна последовательность вызова.
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39360422
Apprehension
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уф! Нашел через окно дебага. К сожалению (или, в нашем деле, - к счастью), чудес не случилось, а была всё-таки невнимательность.
Действительно, событие rowfocuschanged для dw_master было изменено! Вроде смотрел, но, видимо, не вполне еще освоился с интерфейсом.

long ll_itemnum

ll_itemnum = this.object.data[currentrow, 1]

IF dw_detail.retrieve( ll_itemnum ) = -1 then
MessageBox("Retrieve", "Retrieve error-detail")
end if

Спасибо большое за ответы - было интересно! )
...
Рейтинг: 0 / 0
Как происходит связывание информации в двух DW через retrieval argument?
    #39360770
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2016 13:16, Apprehension пишет:

> Действительно, событие rowfocuschanged для dw_master было изменено!

Абсолютно стандартный приём :).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как происходит связывание информации в двух DW через retrieval argument?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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