powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / sharedata()
46 сообщений из 46, показаны все 2 страниц
sharedata()
    #32918007
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Великий ALL.
ЕСть вопрос. PB9.0, W2003, работаю в ПФС.
Есть простая таблица-хочу ее видеть на одной закладке в GRID для скорости навигации и простого редактирования, на другой в FORM для редактирования(полей много). Закладки u_tabpg. Все of_updateable.
1-вариант-shareData этих DW. В результате pfc_save пишет -your DW doesn't have UPDATE capability? Error 3-...between retrieve and update-то есть ничего не получается.
2-вариант-воспользовался Linkage. Дает ошибку в синтаксисе оператора UPDATE-хотя с виду Update совершенно правильный.
Кто знает как сделать такую вещь!
...
Рейтинг: 0 / 0
sharedata()
    #32918024
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаем. Нужно прекратить халтурить и написать изменения БД руками. Тогда всё получится.
____________________________________
- Гарфилд, мышь!
- Спасибо, я сыт!
...
Рейтинг: 0 / 0
sharedata()
    #32918075
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ-только что значит "писать изменения руками"? у каждого руки разные!
...
Рейтинг: 0 / 0
sharedata()
    #32918241
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формировать INSERT/UPDATE/DELETE в БД вручную, а не встроенными средствами. Немного муторно, но избавляет от загадочных глюков. Кроме того, проще делать валидацию вводимых данных.
____________________________________
- Гарфилд, мышь!
- Спасибо, я сыт!
...
Рейтинг: 0 / 0
sharedata()
    #32918259
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000Формировать INSERT/UPDATE/DELETE в БД вручную, а не встроенными средствами. Немного муторно, но избавляет от загадочных глюков. Кроме того, проще делать валидацию вводимых данных.
____________________________________
Очень не хочется пользоваться нештатными(скажем нетипичными) средствами ПБ-там где можно штатными. Это мой принцип. Хотелось бы совета, как управляя Properties /events избежать этой маленькой хитрости.
...
Рейтинг: 0 / 0
sharedata()
    #32918309
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoОчень не хочется пользоваться нештатными(скажем нетипичными) средствами ПБ-там где можно штатными.
С каких пор ESQL стал нештатным средством?

Это мой принцип.
У меня другой принцип - делать так, как работает .

Хотелось бы совета, как управляя Properties /events избежать этой маленькой хитрости.
Не ко мне.
...
Рейтинг: 0 / 0
sharedata()
    #32918414
alexis glinski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboyko1-вариант-shareData этих DW. В результате pfc_save пишет -your DW doesn't have UPDATE capability? Error 3-...between retrieve and update-то есть ничего не получается.
проверь Update Properties твоих DWobject'ов ...
...
Рейтинг: 0 / 0
sharedata()
    #32918810
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboyko Dim2000Формировать INSERT/UPDATE/DELETE в БД вручную, а не встроенными средствами. Немного муторно, но избавляет от загадочных глюков. Кроме того, проще делать валидацию вводимых данных.
____________________________________
Очень не хочется пользоваться нештатными(скажем нетипичными) средствами ПБ-там где можно штатными. Это мой принцип. Хотелось бы совета, как управляя Properties /events избежать этой маленькой хитрости.Насколько я понимаю, вам нужно формировать update только для одного DW - второе получает разделяемые данные.

Вообще, рекомендую посмотреть исходный код объектов в pfc-библиотеках, начиная с события pfc_save в pfc_w_master. Там все довольно прозрачно.

Dim2000...
Это мой принцип.
У меня другой принцип - делать так, как работает .
...Хм... Не от таких ли принципов возникает код, принципиально требующий присутствия автора?
...
Рейтинг: 0 / 0
sharedata()
    #32918881
Юзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня одновременно используеться и ShareData и LinckAge !
Все очень просто - как сказали выше, из всех Шареных DW надо оставить одно со свойством is_updateble , первое! Отсальные - убрать.
Тогда pfc_save() - будет работать нормально.
...
Рейтинг: 0 / 0
sharedata()
    #32918890
Guest_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sboykoВеликий ALL.
ЕСть вопрос. PB9.0, W2003, работаю в ПФС.
Есть простая таблица-хочу ее видеть на одной закладке в GRID для скорости навигации и простого редактирования, на другой в FORM для редактирования(полей много). Закладки u_tabpg. Все of_updateable.
1-вариант-shareData этих DW. В результате pfc_save пишет -your DW doesn't have UPDATE capability? Error 3-...between retrieve and update-то есть ничего не получается.

Попробуй сделать ShareDataOff перед сохранением и ShareData после сохранения.
...
Рейтинг: 0 / 0
sharedata()
    #32918924
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99 Dim2000...У меня другой принцип - делать так, как работает .Хм... Не от таких ли принципов возникает код, принципиально требующий присутствия автора?
Честно говоря, мне абсолютно всё равно, что будет с моим кодом после моей смерти ;). Но, по отзывам других людей, написанное мной требует минимального внимания и легко понятно даже начинающим. Не так уж и плохо. Что же касается внесения изменений в БД только "руками" - это моё убеждение, выстраданное переделкой разного рода глюкал, оставшихся мне в наследство от других.
...
Рейтинг: 0 / 0
sharedata()
    #32919158
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из соседнего топика цитата:
ФилиппНи строчки embedded SQL!!! :-)Обеими руками - за.
Любителей ESQL - давить!
Загадочность глюков как правило проистекает из недостаточно четкого понимания как работает datawindow (ну или PFC).
Делать какие-либо действия с БД в обход стандартных возможностей DW - неправильно.
При таком подходе - данные из DW сохраняются вручную с помощью ESQL - кода больше - соответственно производительность падает - возрастает вероятность ошибки. И поддерживать сложнее, что бы Вы там ни говорили.

По поводу вопроса - правильно использовать Linkage и ShareData одновременно.
Linkage переключить в режим Scroll.
Linkage обеспечивает скроллинг, ShareData - синхронность данных.
updateable у FORM надо отключить ( of_SetUpdateable(False) ? ) поскольку достаточно того, что изменения сохранит GRID.

Выключать ShareData перед сохранением - бред!
...
Рейтинг: 0 / 0
sharedata()
    #32919443
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000Знаем. Нужно прекратить халтурить и написать изменения БД руками. Тогда всё получится.

Более безобразного совета на этом форуме я ещё не слышал.
Ни в коем случае.
...
Рейтинг: 0 / 0
sharedata()
    #32919468
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп Dim2000Знаем. Нужно прекратить халтурить и написать изменения БД руками. Тогда всё получится.
Более безобразного совета на этом форуме я ещё не слышал.
Ни в коем случае.
Можно обосновать? Я свою точку зрения вообще-то обосновал - на разного рода трудновоспроизводимые глюки от использования DW для модификации данных я насмотрелся предостаточно для того, чтобы понять, что это делать не нужно. Оригинальным автором поделий был не я - я их доводил до ума.
...
Рейтинг: 0 / 0
sharedata()
    #32919470
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Г-н sboyko, сделать нужно следующим образом:
1) n_dsa descendant instance variable (назовём для наглядности ids_defaults) на твоём таб контроле, который и будет шариться с DWми на закладках.
2) В Constructorе таб контрола пишешь типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
powerobject lpo_update[]
integer ii, kount

ids_defaults = CREATE u_ds_defaults_db

window lw_parent
IF of_getparentwindow(lw_parent) = SUCCESS THEN 
	ids_defaults.of_setparentwindow(lw_parent)
END IF
ids_defaults.of_Retrieve(АРГУМЕНТЫ)

ii = UpperBound(control)

FOR kount =  1  to ii
	control[kount].dynamic function of_set_source(ids_defaults)	
NEXT
//понятно, что of_set_source - функция на предке закладок, которая собственно и говорит - прошарить.
lpo_update = control

lpo_update[ii +  1 ] = ids_defaults
of_SetUpdateObjects(lpo_update)

3) На datawindows, сидящих на закладках, скриптаешь всё как полагается, pfc_Validation и т.п., НО override pfc_Update и в нём просто пишешь RETURN SUCCESS , поскольку эти datawindows - display only.

По сути дела - всё, остальное - косметика.
...
Рейтинг: 0 / 0
sharedata()
    #32919479
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000на разного рода трудновоспроизводимые глюки от использования DW для модификации данных я насмотрелся предостаточно для того, чтобы понять, что это делать не нужно.

1) разного рода трудновоспроизводимые глюки от использования DW для модификации данных возникают от кривых рук программистов.
2) НЕ использовать DW для модификации данных - оксюморон, это всё равно что сказать - мы используем Powerbuilder, но при этом НЕ используем Powerbuilder .
...
Рейтинг: 0 / 0
sharedata()
    #32919733
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп2) НЕ использовать DW для модификации данных - оксюморон, это всё равно что сказать - мы используем Powerbuilder, но при этом НЕ используем Powerbuilder .
Нее - круче сказать - "Мы используем PB, но не пользуемся DW" :)

Dim2000
Глюки конечно есть, но при достаточно граммотно подходе они все обходятся. Делитесь глюками, глядишь найдуться люди, которые их давно обошли. Не использовать же DW для сохранения данных что через Update table, что через Update Procedure - для меня по меньшей мере странно звучит.
...
Рейтинг: 0 / 0
sharedata()
    #32921472
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSНее - круче сказать - "Мы используем PB, но не пользуемся DW" :)
Не-а, мы пользуемся DW для доставания и показывания данных. Это у него получается просто замечательно .

Глюки конечно есть, но при достаточно граммотно подходе они все обходятся. Делитесь глюками, глядишь найдуться люди, которые их давно обошли.
Тынц
Проблема не у меня (у меня их нет), но с удовольствием прочитаю о способах её решения ;).
...
Рейтинг: 0 / 0
sharedata()
    #32921685
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так это проблема ADO.Net провайдера, а не datawindow, не надо нам тут передёргивать...
...
Рейтинг: 0 / 0
sharedata()
    #32921734
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппНу так это проблема ADO.Net провайдера, а не datawindow
Я считаю это проблемами DW. Ибо select @@identity должно нормально работать на любом хотя бы условно пригодном к использованию провайдере.

не надо нам тут передёргивать...
Это и всё, что Вы можете сказать по существу проблемы ;)?
...
Рейтинг: 0 / 0
sharedata()
    #32921826
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема не у меня (у меня их нет),У стоматолога который считает что зубы не надо лечить, а надо сразу вырывать нафик - тоже проблем нет. Проблемы потом у пациентов
но с удовольствием прочитаю о способах её решения ;).Так там уже есть как минимум два решения
- пользоваться OLEDB вместо ADO.NET
( в семерке когда только появился OLEDB он тоже глючил, потом стало гораздо лучше)

- делать select scope_identity() после UPDATE.
( именно так и приходилось делать при использовании OLEDB под 7ой или 8ой - не помню уже.)
Слегка подправить поведение DW и полностью ампутировать INSERT/UPDATE/DELETE это знаете ли разные вещи.

Я тоже считаю что "трудновоспроизводимые глюки" это либо неумение, либо нежелание разобраться.
Я не сталкивался за последние 10 лет с глюками при сохранении DW которые нельзя было бы обойти, в худшем случае - с помощью пары тройки десятков строк кода.
...
Рейтинг: 0 / 0
sharedata()
    #32921839
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считать вы можете всё, что угодно, но если воспользоваться вашим блестящим советом и "написать изменения БД руками", то бишь взять и написать embedded SQL, который к примеру пойдёт через тот же "любой хотя бы условно пригодный к использованию провайдер", то у вас каким то чудом произойдёт fetch identity прямо внутри UPDATE statementа, и опять же каким то чудом значение identity будет засунуто в какую то локальную переменную?
Если "любой хотя бы условно пригодный к использованию провайдер" поддерживает такую операцию, тогда значение identity появится и в соответствующем datawindow, если нет, то нет, причём здесь datawindow?

Так что не надо нам тут НЕ по существу проблемы передёргивать...
...
Рейтинг: 0 / 0
sharedata()
    #32921900
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000 Тынц
Проблема не у меня (у меня их нет), но с удовольствием прочитаю о способах её решения ;).Пожалуйста!
Если проблема возникает при миграции на очередную версию среды разработки, то, прежде всего, стоит задаться вопросом - надо ли переходить?

Посчитать все плюсы и минусы, к которым такой переход приведет.

В приведенном вами случае минусы перевешивают все имеющиеся плюсы. Думаю, что через год-полтора проблема будет решена, тогда и можно будет задуматься о переходе.
...
Рейтинг: 0 / 0
sharedata()
    #32921952
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппСчитать вы можете всё, что угодно, но если воспользоваться вашим блестящим советом и "написать изменения БД руками", то бишь взять и написать embedded SQL, который к примеру пойдёт через тот же "любой хотя бы условно пригодный к использованию провайдер", то у вас каким то чудом произойдёт fetch identity прямо внутри UPDATE statementа, и опять же каким то чудом значение identity будет засунуто в какую то локальную переменную?
Внутри - не пойдёт. А вот select @@identity into :new_id from dummy (или как там правильно для MSSQL - я сижу на ASA) пока что не подводило.

Так что не надо нам тут НЕ по существу проблемы передёргивать...
Не говорите, что мне нужно делать... продолжение знаете ? Так вот, если по существу вопроса - откуда такая уверенность, что дело не в том, что DW "забывает" послать этот самый select @@identity (или что там нужно посылать) на сервер? Если бы Вы сказали, что select @@identity, посланный с помощью ESQL через ADO.NET на MSSQL, возвращает какую-то чушь - это бы меня убедило (даже поверю на слово - "десятки" под рукой нет).
...
Рейтинг: 0 / 0
sharedata()
    #32921987
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё по существу проблемы (не в этом топике):
1) OLEDB и ADO.NET are equivalent at this point as the current ADO.NET support
in PB is limited to the Data Provider for OLEDB (as the ADO.NET support
is limited to the .NET Data Provider for OLEDB which is in the
System.Data.OleDb namespace)

2) From Sybase's employee - ADO.NET in PB 10 is a layer above PB10. I don't see a compelling use of the ADO.NET driver in PB10. It will be key in PB11 when we can create .NET assemblies, and it's key now in DataWindow .NET 1.0/1.5.

Отсюда вывод - даже в РВ10 НЕ надо использовать ADO.NET (он там ТОЛЬКО для DataWindow.NET) , а надо OLEDB
...
Рейтинг: 0 / 0
sharedata()
    #32922065
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я согласен с Dim2000. ESQL есть вполне штатное средство и запрещать использовать его так же глупо как запрещать использовать DW.

В очень многих случаях намного удобнее и быстрее послать изменения в базу через ESQL'ные INSERT/UPDATE/DELETE чем заводить ради одной переменной dataobject и класть его в pbl. Тоже самое насчет создания DataStore на основе SQLCA.SyntaxFromSQL, плюс еще десяток строк - смена параметров свежесозданого DataStore объекта. И все это ради того чтобы повторить функциональность одной SQL команды???

ЗоринАндрейЯ не сталкивался за последние 10 лет с глюками при сохранении DW которые нельзя было бы обойти, в худшем случае - с помощью пары тройки десятков строк кода.
Все верно. Обойти глюки можно. И способо обхода тоже множество.
Вот только потом, когда надо поменять функциональность или исправить обнаруженую ошибку приходится долго и муторно бегать по десятку окошек.
Проверь event'ы и функции навешаные на конкретный dw contorl, потом проверь pfc_* event'ы и функции навешаные на окно. Потом пойди в родителя этого окна и проверь все эти события и функции там. Потом вернись в потомка проверь их все заново.... Все это чрезвычайно муторно и неприятно.
Намного проще когда вся процедура сохранения данных находится в одном месте. Пусть даже и написана она на чистом ESQL.
...
Рейтинг: 0 / 0
sharedata()
    #32922075
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейЛюбителей ESQL - давить!
Призываю совесть модераторов!!! Это что за безобразие????
Не надо тут разжигать "межнациональные войны"! Ведь это достаточно оскорбительно. Давить...

Я хоть и не любитель ESQL, но скажу так: если Вы не видите смысла в чем-то, это не значит, что его там нет.
Ну зачем, скажите, делать ДС, ретривить туда данные из базы, а потом бегать циклом по этому ДС и делать с ними все что нужно. Почему я сразу не могу сделать тоже самое, что и ПБ? Взять курсор, открыть, отфетчить и закрыть?! А для кого скажите тогда придумали динамические курсоры, которые гораздо проще в использовании чем ДС? И они тоже находят применение, только реже!

Будем считать, что Вы это сказали не подумавши и в конкретном контексте.
...
Рейтинг: 0 / 0
sharedata()
    #32922211
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм, логику в БД выносите, и не будет религиозных войн, ESQL будет применятся только там где нужно и все писаться только через DW. Я лично применяю ESQL на уровне "SELECT INTO Var", все остальное DW и DECLARE PROCEDURE, курсорами в PB не пользуюсь вообще (собственно говоря и в БД то редко ими пользуюсь).
...
Рейтинг: 0 / 0
sharedata()
    #32922497
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSГм, логику в БД выносите, и не будет религиозных войн
почему обезательно в БД, мы ее вынесли на сервер, у нас архитектура клиент-сервер-БД, и все что загружается идет через наш сервер, у клиента нет прямого конекта на БД, все операции идут через сервер.
...
Рейтинг: 0 / 0
sharedata()
    #32922548
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zuzu ASCRUSГм, логику в БД выносите, и не будет религиозных войн
почему обезательно в БД, мы ее вынесли на сервер, у нас архитектура клиент-сервер-БД, и все что загружается идет через наш сервер, у клиента нет прямого конекта на БД, все операции идут через сервер.
Потому в БД, что работы меньше по проектированию, доработке и сопровождению. Для создания 3-х звенок нужны веские обоснования, хотя лучше дальше не продолжать, в форуме "Сравнение СУБД" немало копий в религиозных войнах "2vs3звенки" сломано и ничего не доказано - только пришли к выводу, что кто как может, тот так и делает :)
...
Рейтинг: 0 / 0
sharedata()
    #32922668
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА я согласен с Dim2000. ESQL есть вполне штатное средство и запрещать использовать его так же глупо как запрещать использовать DW.Согласен, запрещать не стоит :-)

White OwlВ очень многих случаях намного удобнее и быстрее послать изменения в базу через ESQL'ные INSERT/UPDATE/DELETE чем заводить ради одной переменной dataobject и класть его в pbl.Оно конечно, заплатку налепить быстрее... Как обеспечить корректное разграничение доступа при таком использовании ESQL? White Owl Тоже самое насчет создания DataStore на основе SQLCA.SyntaxFromSQL, плюс еще десяток строк - смена параметров свежесозданого DataStore объекта. И все это ради того чтобы повторить функциональность одной SQL команды???Все это можно только через специализированные сервисы, инкапсулирующие ESQL вызовы и обеспечивающие всю обвязку - проверку ошибок, разграничение доступа и т.п. В случае использования DW/DS все это должно быть реализовано в соответствующих предках.

White OwlВот только потом, когда надо поменять функциональность или исправить обнаруженую ошибку приходится долго и муторно бегать по десятку окошек.
Проверь event'ы и функции навешаные на конкретный dw contorl, потом проверь pfc_* event'ы и функции навешаные на окно. Потом пойди в родителя этого окна и проверь все эти события и функции там. Потом вернись в потомка проверь их все заново.... Все это чрезвычайно муторно и неприятно.
Намного проще когда вся процедура сохранения данных находится в одном месте. Пусть даже и написана она на чистом ESQL.Вот именно. Если архитектура приложения для изменения функциональности требует подобных действий, может стоит задуматься - а не поменять ли что-нибудь в консерватории?
...
Рейтинг: 0 / 0
sharedata()
    #32924255
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99 White OwlВ очень многих случаях намного удобнее и быстрее послать изменения в базу через ESQL'ные INSERT/UPDATE/DELETE чем заводить ради одной переменной dataobject и класть его в pbl.Оно конечно, заплатку налепить быстрее... Как обеспечить корректное разграничение доступа при таком использовании ESQL?
Э? Что там разграничивать? Разграничение доступа к отдельным таблицам по принципу имени или группы юзера деалается на уровне базы данных. Никак не приложения.
То есть вполне хватит проверить SQLCA.SQLCode после выполнения ESQL команды и если в данном конретном месте возможно получить отлуп по недостатку прав выдать соотвествующее предупреждение пользователю или проигнорировать ошибку... Ну как захочется :)
А во вторых, та же самая проблема есть и при использовании DW. Точно так же можно получить dw_1.Update() = -1 при нехватке прав.
В любом случае, проблема разграничения доступа никак не связана с решением использовать ESQL в данном конкретном месте или заводить специальный datastore.

PL99Все это можно только через специализированные сервисы, инкапсулирующие ESQL вызовы и обеспечивающие всю обвязку - проверку ошибок, разграничение доступа и т.п. В случае использования DW/DS все это должно быть реализовано в соответствующих предках.
Все равно этого предка еще надо делать. А во вторых, опять же на все случаи жизни предков не напасешься. В любом варианте тебе прийдется модифицировать предка под сиюминутные нужды. Имя таблицы там поменять или фильтр по другому построить. Все равно при использовании даже заранее сочиненного u_super_dw_for_update прийдется писать несколько настроечных строк. Да еще и прийдется помнить какие именно настройки это u_super_dw_for_update требует :)
А так, одна строка:
update sometable a set f1=(select f2 from othertable b where a.fk=b.pk and a.pk=:iRowId);
И вся проблема решена :)

PL99Вот именно. Если архитектура приложения для изменения функциональности требует подобных действий, может стоит задуматься - а не поменять ли что-нибудь в консерватории?
Ой, да я бы с удовольствием. Но эта архитектура естественное следствие идиотской PowerBuilder'овской системы наследования объектов и его кривой реализации редактора евентов/функций.
Ну почему для редактирования одного евента надо обязательно закрыть другой? Почему нельзя одновременно открыть на экране два евента одного объекта? Почему нельзя открыть и окно-родителя и окно-потомка и вместе их рассматривать?
...
Рейтинг: 0 / 0
sharedata()
    #32924267
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSГм, логику в БД выносите, и не будет религиозных войн
Религиозные войны идут и по вопросу выносить логику в БД или не выносить :)

А даже если логика и вынесена с клиента на сервер все равно этой логикой еще и управлять как-то надо. Данные ей кидать, указывать по какому из принципов обрабатывать вот эти конкретные данные. Мы ж тут и флудим про то как именно указывать, как именно кидать данные :)
...
Рейтинг: 0 / 0
sharedata()
    #32924288
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНо эта архитектура естественное следствие идиотской PowerBuilder'овской системы наследования объектов и его кривой реализации редактора евентов/функций.
Ну почему для редактирования одного евента надо обязательно закрыть другой? Почему нельзя одновременно открыть на экране два евента одного объекта? Почему нельзя открыть и окно-родителя и окно-потомка и вместе их рассматривать?

А это что за бред?
...
Рейтинг: 0 / 0
sharedata()
    #32924297
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп White OwlНо эта архитектура естественное следствие идиотской PowerBuilder'овской системы наследования объектов и его кривой реализации редактора евентов/функций.
Ну почему для редактирования одного евента надо обязательно закрыть другой? Почему нельзя одновременно открыть на экране два евента одного объекта? Почему нельзя открыть и окно-родителя и окно-потомка и вместе их рассматривать?

А это что за бред?
К сожалению, вам Филипп, этого не понять.
Вот если бы у вас был опыт писания на Java/C++/Delphi/whatever а не один только PowerBuilder, то вы бы сами все это увидели бы.
...
Рейтинг: 0 / 0
sharedata()
    #32924323
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlК сожалению, вам Филипп, этого не понять.
Вот если бы у вас был опыт писания на Java/C++/Delphi/whatever а не один только PowerBuilder, то вы бы сами все это увидели бы.

Г-н computer scientist, вы знаете что бывает когда you assume ? - You make an ass of u and me (для нечитающих по аглицки - когда вы предполагаете, вы делаете задницу из себя и меня)...
И на Java, и на C++ (VC++/MFC) я писал, и имел ужас неоднократно любоваться на Visual Basic код...
...
Рейтинг: 0 / 0
sharedata()
    #32924326
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl PL99Оно конечно, заплатку налепить быстрее... Как обеспечить корректное разграничение доступа при таком использовании ESQL?
Э? Что там разграничивать? Разграничение доступа к отдельным таблицам по принципу имени или группы юзера деалается на уровне базы данных. Никак не приложения. Разграничение прав на уровне БД не отменяет необходимости корректной их обработки на клиенте.

White OwlТо есть вполне хватит проверить SQLCA.SQLCode после выполнения ESQL команды и если в данном конретном месте возможно получить отлуп по недостатку прав выдать соотвествующее предупреждение пользователю или проигнорировать ошибку... Ну как захочется :) Во-во. Именно о таком кривом коде я и говорил.

White OwlА во вторых, та же самая проблема есть и при использовании DW. Точно так же можно получить dw_1.Update() = -1 при нехватке прав.
В любом случае, проблема разграничения доступа никак не связана с решением использовать ESQL в данном конкретном месте или заводить специальный datastore.Вы же ниже приводите мои слова о том, как эти проблемы решены. Что непонятно-то?
PL99Все это можно только через специализированные сервисы, инкапсулирующие ESQL вызовы и обеспечивающие всю обвязку - проверку ошибок, разграничение доступа и т.п. В случае использования DW/DS все это должно быть реализовано в соответствующих предках.

White OwlВсе равно этого предка еще надо делать. А во вторых, опять же на все случаи жизни предков не напасешься. Почему-то у меня таких проблем нет, на все случаи жизни давным давно заведены соответствующие сервисы.
В том числе и для таких постоянно применяемых, а не сиюминутных вещей , как White OwlИмя таблицы там поменять или фильтр по другому построить.. Если же задача новая, то написать код, пригодный для повторного использования, и оформить его в виде сервиса мне удобнее/проще/дешевле, чем лепить какие-то невнятные тексты...
White OwlВсе равно при использовании даже заранее сочиненного u_super_dw_for_update прийдется писать несколько настроечных строк. Да еще и прийдется помнить какие именно настройки это u_super_dw_for_update требует :)Настроечная информация хранится в соответствующих таблицах/файлах/разделах реестра и называется метаинформацией. А помнить надо только наименование документа, где эти фичи (и все прочие) документированы.

White OwlА так, одна строка:
update sometable a set f1=(select f2 from othertable b where a.fk=b.pk and a.pk=:iRowId);
И вся проблема решена :)Я бы не стал раздувать флейм, если бы волею судьбы мне не приходилось сейчас рыть код, в котором в течении четырех лет все проблемы решали подобным образом.

White Owl PL99Вот именно. Если архитектура приложения для изменения функциональности требует подобных действий, может стоит задуматься - а не поменять ли что-нибудь в консерватории?
Ой, да я бы с удовольствием. Но эта архитектура естественное следствие идиотской PowerBuilder'овской системы наследования объектов и его кривой реализации редактора евентов/функций.
Ну почему для редактирования одного евента надо обязательно закрыть другой? Почему нельзя одновременно открыть на экране два евента одного объекта? Почему нельзя открыть и окно-родителя и окно-потомка и вместе их рассматривать?Вы пятую версию PB используете или четвертую? Впрочем, неважно... Какая связь между архитектурой приложения и реализацией среды разработки? А вот система наследования вполне соответствует принципам ООП, поясните, что там такого идиотского?
Впрочем, что-то мне подсказывает, что возможность открыть код предка и потомка одновременно в двух окнах не избавило бы вас от желания легко и просто написать строчку ESQL... А вот использовать copy&paste? наоборот, поощрило бы...
...
Рейтинг: 0 / 0
sharedata()
    #32924369
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99 White OwlТо есть вполне хватит проверить SQLCA.SQLCode после выполнения ESQL команды и если в данном конретном месте возможно получить отлуп по недостатку прав выдать соотвествующее предупреждение пользователю или проигнорировать ошибку... Ну как захочется :) Во-во. Именно о таком кривом коде я и говорил.
А что в этом кривого? Если ты используешь dw_1.Update ты получаешь все тоже самое. Точно так же прийдется заниматься отловом ошибки и разбираться почему именно. Только не при вызове dw_1.Update() а в dw_1.dberror.
Конечно более красиво и чисто было бы просто не допускать вызова ESQL команды update или dw_1.Update() если пользователь заведомо получит отлуп по недостатку прав. Но и в том и в другом варианте принцип работы совершенно одинаков. Еще раз повторю, с точки зрения разграничения прав нету разницы чем пользоваться - dw или esql.

PL99 White OwlВсе равно этого предка еще надо делать. А во вторых, опять же на все случаи жизни предков не напасешься. Почему-то у меня таких проблем нет, на все случаи жизни давным давно заведены соответствующие сервисы.
Иех, хорошо наверное жить в конторе, в которой специалисты на протяжении десятилетий вылизывает одну единственную библиотеку.

PL99В том числе и для таких постоянно применяемых, а не сиюминутных вещей , как White OwlИмя таблицы там поменять или фильтр по другому построить.. Если же задача новая, то написать код, пригодный для повторного использования, и оформить его в виде сервиса мне удобнее/проще/дешевле, чем лепить какие-то невнятные тексты...
Ок. Есть база, в базе две сотни таблиц. Нужно в этих таблицах обновлять значения отдельных полей. Покажи мне подготовленный заранее сервис который справится с такой задачей в одну строку при сиюминутном использовании.
Покажи мне сервис использование которого позволит мне убрать из кода строки типа
select max(f1) into :tmp from dba.t1;
и
insert into dba.t2 (f2) values (:tmp);
Чтоб он работал для любой из сотни имеющихся таблиц, с любым полем в этих таблицах. Я хочу посмотреть на такой сервис.


PL99 White OwlВсе равно при использовании даже заранее сочиненного u_super_dw_for_update прийдется писать несколько настроечных строк. Да еще и прийдется помнить какие именно настройки это u_super_dw_for_update требует :)Настроечная информация хранится в соответствующих таблицах/файлах/разделах реестра и называется метаинформацией. А помнить надо только наименование документа, где эти фичи (и все прочие) документированы.
Все равно, на все случаи жизни заранее сочиненых настроек не напасешься. Затем возможность настроек и делается чтобы их можно было при нужде менять, верно? Но менять то их все равно прийдется. Так зачем строить свою систему, для замены SQL если этот самый SQL уже доступен? Вот если делать систему которой клиент сможет рулить, тогда да - прийдется сочинять настроечные таблицы. Но мы же не о клиентах сейчас говорим, а о себе любимых. Зачем самому себе делать лишний уровень системной инкапсуляции?


PL99 White OwlА так, одна строка:
update sometable a set f1=(select f2 from othertable b where a.fk=b.pk and a.pk=:iRowId);
И вся проблема решена :)Я бы не стал раздувать флейм, если бы волею судьбы мне не приходилось сейчас рыть код, в котором в течении четырех лет все проблемы решали подобным образом.
Ха! А я уже четвертый год довожу до ума проект в котором все запросы к базе решали созданием новых dw. У меня на руках три десятка pbl с сотней dw в каждой. Как ты думаешь сколько там совершенно одинаковых dw различающихся только именем? А? :) А сколько времени надо убить чтобы найти в которой именно из pbl лежит нужный dw? А как весело когда в двух разных pbl лежат два разных dw с одинаковыми именами...
Я бы тоже не стал раздувать флейм, если бы мои коллеги и предшественники почаще пользовались бы ESQL или SQLCA.SyntaxFromSQL. Весь код по объему сократился бы вдвое как минимум.

PL99Вы пятую версию PB используете или четвертую? Впрочем, неважно... Какая связь между архитектурой приложения и реализацией среды разработки? А вот система наследования вполне соответствует принципам ООП, поясните, что там такого идиотского?
Девятую я использую. А среда разработки здесь очень сильно вмешивается. Когда ты делаешь даже простую двузвенку родитель-потомок тебе очень часто приходится переключаться между ними пока разбираешься какой код остается в родителе, а какой выносится в потомка. PB требует чтобы потомок и родитель были уже скомпилированы и лежали в pbl готовом для линковке виде так? Так. А это значит, что если мы добавили в одного потомка некую функциональность, потом собираемся перенести эту функциональность в родителя нам прийдется несколько раз делать код-заглушку или коментарить весь кусок недописаного кода целиком чтобы пойти и проверить как это делалось раньше...
В итоге, очень велика вероятность просто забыть убрать заглушку или снять коментарий. Сделаные, только ради того, чтобы PB позволил нам посмотреть на другой участок кода.
Тоже самое относится и к кодированию евентов/функций. Если в двух сходных функциях надо сделать copy/paste или просто посмотреть имя/параметры вызываемой функции, или уточнить смысл какого-то параметра.... Все равно прийдется делать заглушки/коментарии требующиеся исключительно для удовлетворения PB-шной среды.
Принципы ООП не нарушаются, но увеличивается шанс допустить ошибку.

PL99Впрочем, что-то мне подсказывает, что возможность открыть код предка и потомка одновременно в двух окнах не избавило бы вас от желания легко и просто написать строчку ESQL... А вот использовать copy&paste? наоборот, поощрило бы...
Как говаривал один мой знакомый "Зачем нужно модульное программирование, если есть блочное копирование?" :)
Copy&paste не так уж и плохо. Плохо если оно используется без ума :)
А ESQL как я уже говорил - очень полезная и правильная возможность.
...
Рейтинг: 0 / 0
sharedata()
    #32924394
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Ха! А я уже четвертый год довожу до ума проект в котором все запросы к базе решали созданием новых dw. У меня на руках три десятка pbl с сотней dw в каждой. Как ты думаешь сколько там совершенно одинаковых dw различающихся только именем? А? :) А сколько времени надо убить чтобы найти в которой именно из pbl лежит нужный dw? А как весело когда в двух разных pbl лежат два разных dw с одинаковыми именами...

для того чтобы знать в рунтайме имя ДВ и ПБЛ мы сделали проще: при CTRL+SHIFT+leftdoubleclick поевляется мессага с полным путем до пбл и еще коечто, насчет дублирующих объектах: всегда используется первый из очереди прицепленных ПБЛ к проекту, и вообсче лутше не иметь дублирующих объектов тоесть с одинаковыми иминами так как при компиляции у вас наверно поевляются дофига warningov, что не есть GOOD.
...
Рейтинг: 0 / 0
sharedata()
    #32924396
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl В итоге, очень велика вероятность просто забыть убрать заглушку или снять коментарий. Сделаные, только ради того, чтобы PB позволил нам посмотреть на другой участок кода.
для этого я открываю две IDE PowerBuilderа на тотже прожект, покачто глюков от этого не заметил.
...
Рейтинг: 0 / 0
sharedata()
    #32924398
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сколько времени надо убить чтобы найти в которой именно из pbl лежит нужный dw?Бред.
File -> Open (Ctrl-O) .
В listbox Libraries выбрали ВСЕ pbl.
Набрали имя datawindow object в Object Name.
Нажали Ok.
Если ранее выбирали все PBL то при следующем Ctrl-O - они уже выбраны.
Так что если имя datawindow уже в clipboard - открыть его - полсекунды.
...
Рейтинг: 0 / 0
sharedata()
    #32924401
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это значит, что если мы добавили в одного потомка некую функциональность, потом собираемся перенести эту функциональность в родителя нам прийдется несколько раз делать код-заглушку или коментарить весь кусок недописаного кода целиком чтобы пойти и проверить как это делалось раньше...Бред.
Открываем предка и любых его потомков через Edit Source и резвимся как хотим. ;-)
...
Рейтинг: 0 / 0
sharedata()
    #32924443
Астралопитек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп!!!
Я восхищён!!! Мы в восхищении!!! (Копирайт Кот Бегемот) -- это по поводу Вашей работы со словом assume.
---------------------------------------------------------------------------
Тот, кто различает слова -- дело того праведно.
Святой Кабир Сахиб, один из Мастеров Сюрат Шабд Йоги.
...
Рейтинг: 0 / 0
sharedata()
    #32924450
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zuzuдля этого я открываю две IDE PowerBuilderа на тотже прожект, покачто глюков от этого не заметил.
Сумасшедший.

ЗоринАндрей А сколько времени надо убить чтобы найти в которой именно из pbl лежит нужный dw?Бред.

Слову "бред" ты научился у Филиппа или это спецефическая фенечка этого форума? :)
Ну тут я конечно погорячился слегка (смущенно краснеет). Я предпочитаю искать при помощи FARа и pbldump. Тоже вполне быстро и удобно получается.

ЗоринАндрейБред.
Открываем предка и любых его потомков через Edit Source и резвимся как хотим. ;-)
Можно конечно, только неудобно :)
...
Рейтинг: 0 / 0
sharedata()
    #32924456
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl PL99 White OwlТо есть вполне хватит проверить SQLCA.SQLCode после выполнения ESQL команды и если в данном конретном месте возможно получить отлуп по недостатку прав выдать соотвествующее предупреждение пользователю или проигнорировать ошибку... Ну как захочется :) Во-во. Именно о таком кривом коде я и говорил.
А что в этом кривого? Гм... Проверять надо не SQLCA.SQLCode, a SQLDbCode используемого в данной ситуации объекта транзакции (в общем случае в приложении их более одного). Делать это должен объект, инкапсулирующий базовую функциональность, который, среди прочего, умеет обрабатывать ошибки БД и разграничивать права доступа.

White OwlЕсли ты используешь dw_1.Update ты получаешь все тоже самое. Точно так же прийдется заниматься отловом ошибки и разбираться почему именно. Только не при вызове dw_1.Update() а в dw_1.dberror.А еще любая программа, в конечном счете, становится набором инструкций процессора. Я уже отловил все стандартные ошибки (вроде нарушений ссылочной целостности или отсутствия прав доступа) в предке, передал их в предка невизуального бизнес-объекта (он содержит ссылку на idw_requestor), а там - см. выше. Если ошибка специфична для конкретного бизнес-объекта, то я иду по пути ASCRUS - ловлю их на сервере, клиент получает стандартную структурированную строку, разбирает ее, отображает сообщение об ошибке, пишет в логфайл.

White OwlКонечно более красиво и чисто было бы просто не допускать вызова ESQL команды update или dw_1.Update() если пользователь заведомо получит отлуп по недостатку прав. Но и в том и в другом варианте принцип работы совершенно одинаков. Еще раз повторю, с точки зрения разграничения прав нету разницы чем пользоваться - dw или esql.Да нет, я действительно не допущу вызова метода, на который пользователь не имеет прав - и при этом ограничусь только метаинформацией.

White OwlИех, хорошо наверное жить в конторе, в которой специалисты на протяжении десятилетий вылизывает одну единственную библиотеку.Действительно, мне в этой конторе нравится :-)). Библиотек у нас хватает, проектов тоже, и если бы мы не облегчали себе жизнь грамотным проектированием, то, боюсь штат пришлось бы увеличить раза в три... А с этим сейчас довольно напряженно.

White OwlЕсть база, в базе две сотни таблиц. Нужно в этих таблицах обновлять значения отдельных полей. Покажи мне подготовленный заранее сервис который справится с такой задачей в одну строку при сиюминутном использовании.
Покажи мне сервис использование которого позволит мне убрать из кода строки типа
select max(f1) into :tmp from dba.t1;
и
insert into dba.t2 (f2) values (:tmp);
Чтоб он работал для любой из сотни имеющихся таблиц, с любым полем в этих таблицах. Я хочу посмотреть на такой сервис.Приезжайте, покажу. Адрес по запросу на мыло в профиле. Правда, база не одна, а больше, в том смысле, что это совершенно разные проекты совершенно разных заказчиков. Бизнес у них тоже разный.

White OwlНо мы же не о клиентах сейчас говорим, а о себе любимых. Зачем самому себе делать лишний уровень системной инкапсуляции?Ленивый я :-) Тут у нас народ заметил, что уже до такой степени обленились все, что DW руками рисовать - и то влом :-)

White OwlХа! А я уже четвертый год довожу до ума проект в котором все запросы к базе решали созданием новых dw. У меня на руках три десятка pbl с сотней dw в каждой. Как ты думаешь сколько там совершенно одинаковых dw различающихся только именем? А? :) А сколько времени надо убить чтобы найти в которой именно из pbl лежит нужный dw? А как весело когда в двух разных pbl лежат два разных dw с одинаковыми именами...
Я бы тоже не стал раздувать флейм, если бы мои коллеги и предшественники почаще пользовались бы ESQL или SQLCA.SyntaxFromSQL. Весь код по объему сократился бы вдвое как минимум.Ты просто не умеешь их готовить (С).
offtop
Не более двух лет назад вы задавали элементарные вопросы по PB. Так что, IMHO, насчет "довожу до ума" несколько преувеличено.
end offtop

White OwlКогда ты делаешь даже простую двузвенку родитель-потомок тебе очень часто приходится переключаться между ними пока разбираешься какой код остается в родителе, а какой выносится в потомка. PB требует чтобы потомок и родитель были уже скомпилированы и лежали в pbl готовом для линковке виде так? Так. А это значит, что если мы добавили в одного потомка некую функциональность, потом собираемся перенести эту функциональность в родителя нам прийдется несколько раз делать код-заглушку или коментарить весь кусок недописаного кода целиком чтобы пойти и проверить как это делалось раньше...
В итоге, очень велика вероятность просто забыть убрать заглушку или снять коментарий. Сделаные, только ради того, чтобы PB позволил нам посмотреть на другой участок кода.Мда... Если забыть свой адрес, то можно и домой не попасть.

White OwlКак говаривал один мой знакомый "Зачем нужно модульное программирование, если есть блочное копирование?" :)
Copy&paste не так уж и плохо. Плохо если оно используется без ума :)Глубина мысли просто потрясает... Слово рефакторинг не слыхали? Однозначно, править в консерватории :-)
White OwlА ESQL как я уже говорил - очень полезная и правильная возможность. Плохо если оно используется без ума (С) White Owl
...
Рейтинг: 0 / 0
sharedata()
    #32924459
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаете народ, я пожалуй этот топик прикрою. Тема уже давно по топику не обсуждается, а страсти накаляются уже неплохо. Мое мнение такое: кому как удобнее, тот так и делает. Если благодаря этому проекты успешно работает и человек не пытается учить других словам "правильно", "не правильно", "делай как я", то значит этот человек достиг кармы и он счастлив. В конце то концов проекты мы делаем не за тем, чтобы все красиво и правильно сделать, а чтобы заработать денег (слова моего очень очень высокого ранга в различных структурах шефа, который ни шиша не разбирается в IT, но зато очень разбирается, куда деньги вкладывать нужно). А все остальное (в том числе и жизненный опыт каждого из нас) - это просто философия для души, смысла для других не имеющая и понятная только тем, кто примерно думает так же и готов учиться дальше в данном направлении. Так что я модераторской палочкой с обсуждения "DWvsESQL" вполне благопристойно заменяю на "DW&ESQL" и думаю, что никто не спорит, что в разных ситуациях применяются разные решения, причем одни из них от недостатка опыта, а другие по производственной необходимости и важно помнить, что доказать никому ничего не возможно, можно только обмениваться опытом, учить и учиться. Так что уважаемые коллеги форума PB, нас не так уж много здесь присутствует(можно сказать национальное меньшинство на SQL.RU), давайте жить дружно !!!
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / sharedata()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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