powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Возможно ли???
17 сообщений из 17, страница 1 из 1
Возможно ли???
    #33877758
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени суток.
Комрады есть такой вопрос (зараннее предупреждаю, где брал траву, не спрашивать):

Создаю таблицу, колонки - названия моих .pbd и что-то типа curr_version для каждой из них:
create table PBD(
main_pbd text not null,
main_pbd_curr_version smalldatetime not null,
menu_pbd text not null,
menu_pbd_curr_version smalldatetime not null ну и т.д. ....)

Каким-то макаром загружаю туда свои .pbd

Потом, как только юзер заводит аппликацию, где нибудь в скрипте open event'а запускаю процедуру, летит она в базу данных к таблице PDB и возврашает мне все бла-бла-бла_curr_version's которые я гружу куда-нибудь типа dt_versions[].

Потом,
for i_knt = 1 to UpperBound(dt_versions[])
if dt_version[i_knt] <> f_api_функция_пока_сам_не_знаю_какая_возврашает_date_created_для_pbd("c:\app_folder\main_pbd.pbd") then

SELECT main_pbd INTO :blob_var FROM PBD;

ну и потом, fileopen, filewrite, fileclose ...
if not b_restart then b_restart = true
next

if b_restart then
messagebox('', "щас рестартну")
HALT
end if

В результате чего, клиентам, не надо будет посылать новые билды, если я поймаю бага или добавлю новый процесс, всё что мне надо, это сгенериривать новый .pbd и толкнуть его в базу данных.
...
Рейтинг: 0 / 0
Возможно ли???
    #33877772
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиск в этои форуме рулит...
...
Рейтинг: 0 / 0
Возможно ли???
    #33877822
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если честно, я не совсем представляю на какое слово искать, не только форум, но и гугли.
...
Рейтинг: 0 / 0
Возможно ли???
    #33877878
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинай искать со слов SetLibraryList, AddToLibraryList.

---
http://www.rusug.ru] Портал рускоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
Возможно ли???
    #33877901
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неверно, начинать надо по простому - с PBD :-)
А вообще то был топик
Обновление приложения
...
Рейтинг: 0 / 0
Возможно ли???
    #33880972
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ребята, но ...
1. Сова, мне как бы не надо добавлять и убирать библиотеки (pbd'шки).
2. Филипп, запускать одну прогу из другой ... самый последний вариант, должен быть полностью уверен, что инного выхода нет.

Вы мне обясните ребята, а то у меня образование два класса - три коридора:
запускаетса аппликация, последняя строчка open (w_frame)

w_frame, open event ... код-код-код ... в конце пишу:
IF FileDelete('c:\app_folder\xyz.pbd') THEN
MessageBox('frame', 'deleted')
else
messagebox('frame', 'NOT deleted')
end if

где xyz.pbd - один из .pbd включенных в билд.

потом в меню аппликации на кнопке delete (рэндомли выбрал) пишу
// Over ...
IF FileDelete('c:\app_folder\xyz.pbd') THEN
MessageBox('menu', 'deleted')
else
messagebox('menu', 'NOT deleted')
end if

потом в одном из тестировочных окон которое вижу только я, на click event кнопки "test" пишу:
IF FileDelete('c:\app_folder\xyz.pbd') THEN
MessageBox('test', 'deleted')
else
messagebox('test', 'NOT deleted')
end if

генерирую билд, запихиваю свеже испечённые .exe и .pbd'шки в фолдер аппликации и запускаю прогу.

выскакивает: messagebox('frame', 'NOT deleted'), на всякий случай проверяю директорию, xyz.pbd там.

жму "delete" из менюшки, выскакивает: messagebox('menu', 'NOT deleted'), на всякий случай проверяю директорию, xyz.pbd там.

открываю своё тестировачное окошко, жму кнопку "ТЕСТ", выскакивает:
MessageBox('test', 'deleted'), опять на всякий случай проверяю директорию, xyz.pbd там НЕТ.

Я так понял что всё дело в лоад/анлоад или лок/анлок.

Я к чему это всё, хочу переписать .pbd когда прога уже стартанула.

?????????????
Tnx
...
Рейтинг: 0 / 0
Возможно ли???
    #33880988
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronk2. Филипп, запускать одну прогу из другой ... самый последний вариант, должен быть полностью уверен, что инного выхода нет.
Это единственно приемлемый вариант.
...
Рейтинг: 0 / 0
Возможно ли???
    #33881804
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы работало динамическое создание PBD нужно чтобы загрузчик не зависел (статически) от объектов в тех PBD.
Пусть приложение состоит из таких библиотек: loader.pbd, app1.pbd, app2.pbd
Тогда при сборке EXE должен быть libraryList={loader.pbl}
При старте приложения loader создает PBD и меняет libraryList на {loader.pbd; app1.pbd; app2.pbd}
После этого запускается основной класс приложения:
Код: plaintext
1.
2.
PowerObject mainObject
mainObject = create using "n_cst_main"
mainObject. Dynamic event ue_start(args ...) 

PS. С PFC это не сработает, так как там используется глобальная переменная менеджера приложения и не получится убрать из library list библиотеки PFC. Хотя поизвращаться можно :)
...
Рейтинг: 0 / 0
Возможно ли???
    #33883147
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое всем спасибо за разъяснение.
Я не работаю с PFC, наша аппликация завязана на PowerTool от PowerServ.
Анатолий, если не затруднит, можно немного поподробнее.
...
Рейтинг: 0 / 0
Возможно ли???
    #33883436
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что именно не понятно?
...
Рейтинг: 0 / 0
Возможно ли???
    #33883505
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит мне из моего project нужно убрать все библиотеки которые я потенциально менять на ходу.
Оставить все powertool которые заведуют подключением к базе данных и т.д.

В open event аппликации, добавить свою кодировку по проверке и замене .pbd и если всё будет успешно последнее строкой добавить SetLibraryList(s_lib_list) где s_lib_list = мои рабочии .pbd которые уже возможно были заменены.

Я правильно понял?
...
Рейтинг: 0 / 0
Возможно ли???
    #33883514
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, все верно.

---
http://www.rusug.ru] Портал рускоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
Возможно ли???
    #33883531
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если загрузчик загружает, запускает приложение и плавно отваливает
Такой вариант не рассматривался?
...
Рейтинг: 0 / 0
Возможно ли???
    #33883617
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001а если загрузчик загружает, запускает приложение и плавно отваливает
Такой вариант не рассматривался?
Это то о чем Филипп говорил.
Это самый простой вариант - ничего не надо менять в приложении, и нет описанных выше ограничений.
...
Рейтинг: 0 / 0
Возможно ли???
    #33886063
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докладаю.

Вчера всё дописал и сделал quick тест. Ok.

В библиотеку где находитса апплиkация, были передвинуты из других библиотек несколько объектов, на которые есть референс в open event аппликации.

Как-то, w_login и функция которая заведует проверкой create/modify date .pbd'шек в аппликейшн фолдере у юзеров.

В конце open eventa аппликации был добавлен следуюший скрипт:

SetNull(l_handle)

s_name = space(81)

GetModuleFileNamea(l_handle, s_name, 80)

// делаем это всё только в продакшн энвайромент ...
IF UPPER(Right(s_name, 8)) <> 'PB90.EXE' THEN
/* динамически создаём datastore на базе процедуры которая
возврашает дату из таблицы:

вот на всякий случай синтакс таблицы, процедура возвращает только pbd и pbd_created_date ...

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CUSTOM_PBD]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[CUSTOM_PBD]
GO

CREATE TABLE [dbo].[CUSTOM_PBD] (
[pbd] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[pbd_text] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[pbd_created_date] [smalldatetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
*/

s_sql_syntax = 'execute dbo.spu_custom_pbd_list;1'
s_presentation_str = "style(type=Tabular) Column(Font.Face='Microsoft Sans Serif' Font.Height= -8)"

s_dwsyntax_str = sqlca.SyntaxFromSQL(s_sql_syntax, '', s_errors)

IF Len(s_errors) > 0 THEN
MessageBox("Title", 'SyntaxFromSQL Failed. Errors: ' + s_errors, Exclamation!)
END IF

ds_pbd = CREATE datastore

ds_pbd.CREATE(s_dwsyntax_str, s_errors)

IF Len(s_errors) > 0 THEN
MessageBox("Title", 'SQLCreate Failed. Errors: ' + s_errors, Exclamation!)
END IF

i_rc = ds_pbd.settransobject(sqlca)

IF Len(s_errors) > 0 THEN
MessageBox("Title", 'settransobject()=' + string(i_rc), Exclamation!)
END IF

l_row = ds_pbd.Retrieve()

IF l_row < 1 THEN
DESTROY ds_pbd
ELSE
FOR l_row = 1 TO ds_pbd.RowCount()
s_db_pbd = ds_pbd.GetItemString(l_row, 'pbd')
s_local_pbd = 'c:\app_folder\' + s_db_pbd

dt_db_pbd_created_date = ds_pbd.GetItemDateTime (l_row, 'pbd_created_date')

i_rc = f_get_file_time(s_local_pbd, dt_null, dt_null, dt_local_pbd_created_date)

IF i_rc <> 1 THEN
MessageBox("Title", 'f_get_file_time() <> 1', Exclamation!)
EXIT
ELSE
IF dt_local_pbd_created_date < dt_db_pbd_created_date THEN
i_file_num = FileOpen(s_local_pbd, StreamMode!, Write!, LockReadWrite!, Replace!)

IF i_file_num = -1 OR IsNull(i_file_num) = TRUE THEN
MessageBox("Title", 'FileOpen() Fail', Exclamation!)
EXIT
ELSE
SELECTBLOB pbd_text INTO :bl_tot_bl FROM CUSTOM_PBD WHERE pbd = :s_db_pbd USING SQLCA;

l_bloblen = Len(bl_tot_bl)

IF l_bloblen > 0 THEN
// Determine the number of writes required
// to write the entire blob
IF l_bloblen > 32765 THEN
IF Mod(l_bloblen, 32765) = 0 THEN
i_writes = l_bloblen / 32765
ELSE
i_writes = (l_bloblen / 32765) + 1
END IF
ELSE
i_writes = 1
END IF

l_currentpos = 1
FOR i_cnt = 1 TO i_writes
lblb_Data = BlobMid(bl_tot_bl, l_currentpos, 32765)
l_CurrentPos += 32765

IF FileWrite(i_file_num, lblb_Data) = -1 THEN
EXIT
RETURN
END IF
NEXT
FileClose(i_file_num)

END IF
END IF
END IF
END IF
NEXT
END IF

DESTROY ds_pbd

i_rc = AddToLibraryList ('abc.pbd,xyz.pbd, .....')
IF i_rc <> 1 THEN
MessageBox("Title", 'AddToLibraryList()=' + string(i_rc) + 'Application can not be started.', Exclamation!)
HALT CLOSE
END IF
END IF

потом-
Сохранил свой "старый" project как project2 и убрал галки со всех рабочих .pbd

Теперь, сначала я делаю deploy "старого" project, который создаёт мне рабочии .pbd, потом "нового", который создаёт мне "правильный" .exe

Гружу все файлы в InstallShieldExpress, генерирую .msi и устанавливаю на тестировочные машины с разными операционками, 98, 2000, XP.

С утра интенсивно тестировал, втягивание: window, datawindow, function, structure, изменение кода и layout уже сушествуюших объектов.

Вроде работает всё кроме изменений (добавлений) в меню OBJECT, хотя дату файла меняет, значит .pbd создаёт ... ??? разберёмся.

Вообщем я счастлив, большое всем спасибо.

Буду благодарен за любые поправки в выше изложеном коде/подходе, надеюсь может кому-нибудь, на что-нибудь и сгодитса.
...
Рейтинг: 0 / 0
Возможно ли???
    #33886193
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voronkIF UPPER(Right(s_name, 8)) <> 'PB90.EXE' THEN
Более универсально так:
Код: plaintext
if Handle(GetApplication()) <>  0  Then // Runtime

потом-
Сохранил свой "старый" project как project2 и убрал галки со всех рабочих .pbd

Теперь, сначала я делаю deploy "старого" project, который создаёт мне рабочии .pbd, потом "нового", который создаёт мне "правильный" .exe

Здесь не так надо делать.

Дело в том что если убрать галки в проекте, то объекты этих PBL включаются в EXE. А EXE находится в liblist в самом начале и это никак нельзя изменить. А значит объекты EXE будут иметь приоритет перед объектами в PBD.

Для корректной сборки, нужно сделать отдельный таргет с liblist = loader и EXE собирать им, а PBD собирать в таргете с полным liblist.
...
Рейтинг: 0 / 0
Возможно ли???
    #33886438
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Анатолий.
Переделал, пришлось в библиотеку с аппликацией добавить парочку объектов без которых .exe не хотел создаватса.
Один из которых ... - наше меню, что автоматически объяснило почему сегодня утром у меня были с ним проблемы.

Будем тестировать дальше.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Возможно ли???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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