powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / sharedata()
21 сообщений из 46, страница 2 из 2
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
21 сообщений из 46, страница 2 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / sharedata()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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