powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / подключение ДВ
25 сообщений из 39, страница 1 из 2
подключение ДВ
    #32814051
Необходимо реализовать следующее:

есть <filename.srd> - исходник датавиндова.

можно ли во время выполнения программы, подключить его?
...
Рейтинг: 0 / 0
подключение ДВ
    #32814187
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаем про
Код: plaintext
dw_1.Create(ls_syntax)
...
Рейтинг: 0 / 0
подключение ДВ
    #32815227
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркЧитаем про
Код: plaintext
dw_1.Create(ls_syntax)


А не проще ли про LibraryImport PowerScript function почитать?
...
Рейтинг: 0 / 0
подключение ДВ
    #32815275
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппА не проще ли про LibraryImport PowerScript function почитать?
Прочитать то может быть и проще, только зачем? Иметь динамически изменяющийся код программы, различный у разных пользователей, когда файлы - вот они лежат.
...
Рейтинг: 0 / 0
подключение ДВ
    #32815336
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк ФилиппА не проще ли про LibraryImport PowerScript function почитать?
Прочитать то может быть и проще, только зачем? Иметь динамически изменяющийся код программы, различный у разных пользователей, когда файлы - вот они лежат.

Бред какой-то.
Если использовать LibraryImport - это грубо говоря 2 строчки кода (считая dataobject assignment).
Если вашим методом делать, то это
1) Чтение файла
2) Парсание его, поскольку .srd напрямую в dw_1.Create(ls_syntax) не пойдёт (то есть пойдёт, но "датавиндова" сблюёт :-) )
3) А уж потом dw_1.Create(ls_syntax)
...
Рейтинг: 0 / 0
подключение ДВ
    #32815783
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппБред какой-то.
Да похоже.
ФилиппЕсли использовать LibraryImport - это грубо говоря 2 строчки кода (считая dataobject assignment).
Да?
ФилиппЕсли вашим методом делать, то это
1) Чтение файла
А для LibraryImport файл уже читать не нужно?
Филипп2) Парсание его, поскольку .srd напрямую в dw_1.Create(ls_syntax) не пойдёт (то есть пойдёт, но "датавиндова" сблюёт :-) )
Парсить - это здесь только одно название. Выкинуть первую строчку.
Код: plaintext
dw_1.Create(mid(ls_syntax,pos(ls_syntax,char( 10 )) +  1 ))
Распарсил? Заодно и DataWindow создал.
А по поводу сблюет - только лишнее свидетельство недальновидности (мягко выражаясь) авторов PB.
Филипп3) А уж потом dw_1.Create(ls_syntax)
И что мы имеет? В результате в вашем случае мы имеем лишнее действие - затягивание файла в библиотеку. В моем парсение синтаксиса (первую строчку, кстати, можно просто пропустить при чтении файла). Далее, когда набор DataWindow лежит в виде файлов, то от легко управляется любым броузером файлов и не привязан к программе. Затягивая это все хозяйство в библиотеку, мы имеем проблемы при обновлении версий (эту библиотеку ни в коем случае не накрывать другими версиями), переносе DataWindow из одного места установки программы в другой (объединение набора DataWindow из разных мест). Плюс ко всему, имеем неприятные особенности, связанные с PowerBuilder'ом. К примеру - необходимо контроливорать размер библиотеки (по крайней мере в PB6 при больших размерах библиотеки с вероятностью ~50% билдер при сохранении разрушал библиотеку - убеждался на личном опыте). Несколько раз в PB 9 при сохранении DataWindow после этого приходилось править руками синтаксис, т.к. криво сохранял. Один раз наблюдал сохраненное окно... но скрипты куда-то пропали.
Так что мы уж лучше доверим это дело файловой системе, благо она более надежна.
...
Рейтинг: 0 / 0
подключение ДВ
    #32815944
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркПарсить - это здесь только одно название. Выкинуть первую строчку.
Код: plaintext
dw_1.Create(mid(ls_syntax,pos(ls_syntax,char( 10 )) +  1 ))

Распарсил? Заодно и DataWindow создал.
А по поводу сблюет - только лишнее свидетельство недальновидности (мягко выражаясь) авторов PB.Эта строка кода (мягко выражаясь недальновидно ) не учитывает наличие комментария к объекту.
...
Рейтинг: 0 / 0
подключение ДВ
    #32815992
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейЭта строка кода (мягко выражаясь недальновидно ) не учитывает наличие комментария к объекту.
:( Согласен. Лучше искать char(10) + "release"
...
Рейтинг: 0 / 0
подключение ДВ
    #32817351
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Распарсил, заодно создал, а если ещё раз этот же dataobject в этом же runе программы нужно использовать?
Опять "распарсил, заодно создал"? Вместо того чтобы его on demand сунуть в пиббл и уже иметь там и просто назначать. Говорю же - бред :-)

2) Прочитать файл по вашему - это многоступенчатый Powerscriptовый процесс (о чём я уже говорил), вместо одного системного вызова...

3) Не нравится иметь эти dataobjectы постоянно - существует LibraryDelete PowerScript function - Deletes a library file or, if you specify a DataWindow object , deletes the DataWindow object from the library. Зови её в application object's close event...
...
Рейтинг: 0 / 0
подключение ДВ
    #32817596
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оба приведенных варианта годятся, только все зависит от задачи. Если нужно одноразово закачать ДВ в приложение, то можно и в библиотеку. А вот если это технология работы программы и все или группа ее датавиндовов вынесена в файлы, то по другому может и не получится. Ведь в откомпилированную библиотеку ничего не заимпортируешь, да и не к чему это, держать на клиентах исходники.
А если этот датавиндов часто используется, то его можно при загрузке ПО закачать и держать в памяти. Более того, можно развить эту мысль, и держать исходный текст не в srd файлах, а в бд, например...
...
Рейтинг: 0 / 0
подключение ДВ
    #32817892
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппОпять "распарсил, заодно создал"? Вместо того чтобы его on demand сунуть в пиббл и уже иметь там и просто назначать. Говорю же - бред :-)
Да, да, да.
Филипп2) Прочитать файл по вашему - это многоступенчатый Powerscriptовый процесс (о чём я уже говорил), вместо одного системного вызова...
О каком системном вызове идет речь, я никак не пойму.
Филипп3) Не нравится иметь эти dataobjectы постоянно - существует LibraryDelete PowerScript function - Deletes a library file or, if you specify a DataWindow object, deletes the DataWindow object from the library. Зови её в application object's close event...
Вот, я и говорю, по хорошему свой аналог library painter'а писать надо. А что будет если программа завершится аварийно? В pbl останется мусор? А если в это время компьютер зависнет? Останемся с кривой pbl? Нужно придумывать схему для задания уникальных названий DataWindow - а вдруг datawindow с таким именем уже есть, что тогда будет? Не нравится каждый раз считывать? Кэшируйте в памяти, сохраняя синтаксис DataWindow. Ваш метод с LibraryImport несет в себе лишь одни проблемы, перечисление которых можно продолжать. Единственная проблема, моего метода - это недокументированность формата *.srd
...
Рейтинг: 0 / 0
подключение ДВ
    #32819423
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВот, я и говорю, по хорошему свой аналог library painter'а писать надо. А что будет если программа завершится аварийно? В pbl останется мусор? А если в это время компьютер зависнет? Останемся с кривой pbl?
Кто мешает её чистить на старте программы?
И вообще, если бы во рту росли грибы...
...
Рейтинг: 0 / 0
подключение ДВ
    #32819729
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
Единственная проблема, моего метода - это недокументированность формата *.srd
Это как раз не проблема:)

А вот есть еще проблема: без LibraryImport не получится использовать это DW как вложенное в композитных отчетах.

С другой стороны у LibraryImport есть проблемы при работе нескольких экземпляров приложения, поскольку первый, кто импортирует, тот блокирует файл библиотеки, и остальные не смогут туда что-либо импортировать. Т.е. каждый экземпляр должен импортировать в свою личную библиотеку.
...
Рейтинг: 0 / 0
подключение ДВ
    #32821603
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
А вот есть еще проблема: без LibraryImport не получится использовать это DW как вложенное в композитных отчетах.
В отношении композитных отчетов эта проблема как раз разрешима и без LibraryImport :-)

Вот с nested - уже нет.
...
Рейтинг: 0 / 0
подключение ДВ
    #32821817
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп Anatoly Moskovsky
А вот есть еще проблема: без LibraryImport не получится использовать это DW как вложенное в композитных отчетах.
В отношении композитных отчетов эта проблема как раз разрешима и без LibraryImport :-)

Вот с nested - уже нет.
И как можно сделать композит без LibraryImport?
...
Рейтинг: 0 / 0
подключение ДВ
    #32822043
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИ как можно сделать композит без LibraryImport?
Так же как и обычное ДВ. Только все нестеды должны быть уже в приложении, а вот создать нестед в композите не получится.
...
Рейтинг: 0 / 0
подключение ДВ
    #32822066
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer White OwlИ как можно сделать композит без LibraryImport?
Так же как и обычное ДВ. Только все нестеды должны быть уже в приложении, а вот создать нестед в композите не получится.
Глупости.

Делается это так:

1) В нормальном скомпиллированном PBD должен иметься dataobject-болванка, с какой нибудь одной колонкой, external, неважно...

Преположим нужно сделать композит с N report objects, у которых dataobjectы не существуют в пибблах...

2) Берём готовое (или через dw_1.Create(ls_syntax)) создаем datawindow, затем в нём опять же с помощью Create создаем N report objects (именуя их уникально), причём dataobjectами им всем назначаем наш "dataobject-болванка".

3) В цикле делаем GetChild на все уникально именованные N report objects и с помошью datawindowchild.Create(syntax) засандаливаем в них синтакс, сидящий в памяти (или в .srd файлах)
...
Рейтинг: 0 / 0
подключение ДВ
    #32822068
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп Anatoly Moskovsky
А вот есть еще проблема: без LibraryImport не получится использовать это DW как вложенное в композитных отчетах.
В отношении композитных отчетов эта проблема как раз разрешима и без LibraryImport :-)

Вот с nested - уже нет.
я именно это и сказал, только вместо nested употребил соответствующее слово на другом языке :)
...
Рейтинг: 0 / 0
подключение ДВ
    #32822098
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавно, надо будет попробовать. А почему тот же самый метод не сработает для master-nested? Или datawindowchild.Create(syntax) откажется работать?
...
Рейтинг: 0 / 0
подключение ДВ
    #32822105
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЗабавно, надо будет попробовать. А почему тот же самый метод не сработает для master-nested? Или datawindowchild.Create(syntax) откажется работать?

Для настоящих nested GetChild не будет работать...
...
Рейтинг: 0 / 0
подключение ДВ
    #32824086
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп!!! Ты не знаешь как взять DataWindowChild не из композитного DW???
Я поражен! :)
...
Рейтинг: 0 / 0
подключение ДВ
    #32824121
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlФилипп!!! Ты не знаешь как взять DataWindowChild не из композитного DW???
Я поражен! :)
Вложенные DW могут быть не только в композитных DW. Вот там вот и нельзя получить для них DataWindowChild - фича которую обещают разрулить в PB11 (если у меня не срабатывает ложная память:)
...
Рейтинг: 0 / 0
подключение ДВ
    #32824189
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВложенные DW могут быть не только в композитных DW. Вот там вот и нельзя получить для них DataWindowChild - фича которую обещают разрулить в PB11 (если у меня не срабатывает ложная память:)
Ну на мой взгляд, это не фича, а полноценный баг. И его давно пора чинить...
Но, вообще-то, существует трюк позволяющий обойти эту проблему :)
...
Рейтинг: 0 / 0
подключение ДВ
    #32824352
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Anatoly MoskovskyВложенные DW могут быть не только в композитных DW. Вот там вот и нельзя получить для них DataWindowChild - фича которую обещают разрулить в PB11 (если у меня не срабатывает ложная память:)
Ну на мой взгляд, это не фича, а полноценный баг. И его давно пора чинить...
Но, вообще-то, существует трюк позволяющий обойти эту проблему :)

Ну что ж, тогда вот для примера, хочется узнать как это сделать для такого случая:
Есть tabular с источником данных "select id, name from customer". В его detail вставлено поле "name" и nested dw_orders, который в гриде показывает для каждого заказчика его заказы "select order_no, order_sum from orders where cust_id = :ai_customer". Аргумент ai_customer привязывается к полю id из tabular.
Таким образом получается отчет вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Microsoft
--------------
 01    |   1000 . 00 
 02    |   3000 . 00 
--------------
Borland
--------------
 01    |    200 . 00 
 02    |    300 . 00 
--------------
Задача:
Получить DatawindowChild для dw_orders.
Контрольный вопрос:
Допустим, что dwchild получен. Сколько в нем будет записей?
...
Рейтинг: 0 / 0
подключение ДВ
    #32824379
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Задача:
Получить DatawindowChild для dw_orders.
если главное dw зовут tabular, то:
Код: plaintext
1.
tabular.Object.DataWindow.Processing =  5 
tabular.GetChild('dw_orders', dwc);
5 - это код композитного dw. Тогда PB думает что tabular это на самом деле dw композитного типа и GetChild() работает без малейших проблем.
Что самое забавное, присвоение пятерки никак не влияет ни на что другое. Во всяком случае я пока с проблемами не сталкивался.

Anatoly MoskovskyКонтрольный вопрос:
Допустим, что dwchild получен. Сколько в нем будет записей?
А кто ж его знает?! :)
Смотря в какой момент это проверять. Если повесить процедурку на tabular.RetrieveRow, то возможно получишь доступ до всех строк nested dw по порядку.
Просто я сам ни разу не пытался получить доступ к данным в nested dw (не было нужды :) ), потому не могу сказать что там будет, но вытащить описание объектов из вложенного dw можно.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / подключение ДВ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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