|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Задача заключается в обработке данные некоторой выборки построчно в один проход. Я решаю её с помощью курсора. Мне Филипп возразил >>если вы РВ занимаетесь, то зачем вам курсор? >>Embedded SQL по определению хуже datastore, он туп и труднее >>поддерживается последующими программистами Хотелось бы услышать аргументацию и мнения других как по поводу сравнения 1)курсор - datastore, так и 2)Embedded SQL - объекты PB. Я Embedded SQL использую довольно широко. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2003, 20:01 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Если нет достойных аргументов (а их почти никогда нет), то своим подчиненным я разрешаю пользоваться только RPC функциями, объявленными на transaction objectе, а Embedded SQL запрещаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2003, 20:05 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Филипп писал:своим подчиненным я разрешаю пользоваться только RPC функциями, объявленными на transaction objectе, а Embedded SQL запрещаю Если я Вас правильно понял, Филипп, то в вашей компании сложились (не без вашего участия, надо понимать) некоторые стандарты использования PB в мирных целях - development (coding) policy, так сказать... Поведайте миру вкратце, если это не секрет. Такая тема, как разработка крупных систем на PB с последующей поддежкой и правила организации жизни при таком раскладе - вещь архиинтересная и до сих пор на форуме не возникавшая. Ясно, что тема неподъемая, но вы тезизами - мы поймем. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2003, 20:30 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
2 Kr_Yury Embedded SQL бывает используется в виде исключения (нет у нас такой дисциплины разработки как в компании Филиппа :-), работать с DW/DS существенно удобнее. Есть правда одно "но". В случае, если метод объекта формируется динамически, то соответствующий ему вызов процедуры оформлен в предке как Dynamic SQL Format 4. Кроме того, принятая у нас технология разработки позволяет динамически подставлять условие where в DW/DS, связаные с невизуальным объектом PB, реализующим клиентскую часть бизнес-логики. Так что, преимуществ у курсоров/embedded sql по сравнению с технологией, поощряемой разработчиками PB, на мой взгляд, нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2003, 21:06 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Меня тоже волнует эта тема. Работая в предыдущей конторе, я столкнулся с тем, что мне запрещали писать хранимые процедуры и прочие тригерры, все запросы писались на Embedded SQL. Сейчас работаю в другой конторе, здесь ситуация диаметрально противоположная - большая часть идет как хранимые процедуры и тригерры. Так что мне есть с чем сравнивать... Первый подход, на мой взгляд, хорош тем, что нет сильной привязке к базе, можно перетащить без особых усилий все на другую базу. Второй подход хорош тем, что можно меняя процедуру либо тригерр послать скрипт в удаленный офис (филиал), а там его без труда забатварют в базу, т.е. не нужно пересылать весь, порой огромный проект, для внесения каких то изменений. И еще, Филипп мне кажется прав, в том что Embedded SQL туп и труднее поддерживается последующими программистами . Так, что если думать о перспективе, то лучше не пользоваться Embedded SQL, хотя я бы не стал ЗАПРЕЩАТЬ им пользоваться, как это делает Филипп, иногда лучше и проще применять именно Embedded SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 10:14 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Работая в предыдущей конторе, я столкнулся с тем, что мне запрещали писать хранимые процедуры и прочие тригерры, все запросы писались на Embedded SQL. Можно наивный вопрос проектировщика БД - А как же целлостность базы ? А как же права доступа и т.д. и т.п. ? Я конечно понимаю, что если у БД только одно клиентское приложение, то всю бизнес-логику можно и внутри него реализовать, но мне кажется это потенциально опасным. Например я когда БД проектирую всю проверку целлостности и правильности данных в триггера впихиваю, если ее нельзя штатными средстами СУБД указать. В итоге те кто пишут клиента в придачу получают бесплатного тестера в виде самой БД и сразу могут вычислить ошибки в действиях клиентского приложения и прикинуть, какой уровень проверок в интерфейсе неплохо бы было ввести в клиента (ну например блокирование полей в гриде, которые при заданных условиях не подлежат редактированию). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 11:20 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
To ASCRUS : Права доступа контролировались самим клиентским приложением. Была некая прога (оболочка) в которую юзера заходили под своими учетками и паролями, которые прописаны в базе (это проверялось самой прогой). Далее из оболочки можно было запускать уже нужные пользователю программы. Самое забавное, что при этом запуске шел коннект к базе с логином и паролем, которые есть у ASA по умолчанию! Хотя контора серьезная и очень сильно там следят за безопасностью (с крутыми бабками народ работает), но система была устроена именно так! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 12:51 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
2 Black Savage Многие пишут без оглядки на безопасность доступа к БД. А для того, чтобы "очень сильно там следить за безопасностью" надо специального квалифицированного человека (читай DBA) держать в службе безопасности, для этого руководство компании об этом представление иметь должно :-) 2ASCRUS Например я когда БД проектирую всю проверку целлостности и правильности данных в триггера впихиваю, если ее нельзя штатными средстами СУБД указать. Вообще-то, триггера - это штатное средство СУБД, разве нет? В итоге те кто пишут клиента в придачу получают бесплатного тестера в виде самой БД и сразу могут вычислить ошибки в действиях клиентского приложения и прикинуть, какой уровень проверок в интерфейсе неплохо бы было ввести в клиента (ну например блокирование полей в гриде, которые при заданных условиях не подлежат редактированию). А почему только в гриде? Чем он с этой точки зрения отличается от формы? В свое время я реализовал класс именно на связке PB (6.5 EE) и SAW 5.4, позволяющий автоматически закрывать возможность редактирования полей в DW в зависимости от прав пользователя на UPDATE соответствующих полей таблиц, после чего оставалось только корректно администрировать БД :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 14:15 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
PL99 Вообще-то, триггера - это штатное средство СУБД, разве нет? Имелось ввиду, что целостность и непротиворечивость данных частенько можно решить без дополнительного написания кода, через те же связи и каскадные операции. А почему только в гриде? Чем он с этой точки зрения отличается от формы? Грид был приведен в кач-ве примера. В свое время я реализовал класс именно на связке PB (6.5 EE) и SAW 5.4, позволяющий автоматически закрывать возможность редактирования полей в DW в зависимости от прав пользователя на UPDATE соответствующих полей таблиц, после чего оставалось только корректно администрировать БД :-) Хорошее решение, но все равно им все не обхватишь, оно больше подходит только для контроля прав доступа к полям в клиенте. Часто встречается случай, когда в поля таблицы клиент имеет право заносить значения при добавлении новой записи и потом изменять их в зависимости от неких условий (например для всех записей, которые были введены в текущем действующем периоде для задач, где есть такое понятие, как расчетный период). Хотя понятно, что для каждой задачи все равно будут свои решения и нечто универсальное сделать невозможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 15:19 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Должно быть понятно, что когда я написал "запрещаю", то слегка утрировал :-) С "лучше и проще применять именно Embedded SQL" , штука вот какая. Когда тебе надо быстро и просто достать из БД ОДНО значение какого нибудь флага, то конечно Embedded SQL выглядит заманчиво. Проблема в том, что через месяц оказывается, что тебе надо было не один флажок из этой чертовой таблицы в этом событии/функции достать, а 3, а ещё через пару месяцев оказывается, что в эту таблицу добавили ещё пару тройку колонок, без которых твоё событии/функция ну просто как без рук, и т.д. и т.п. Ты продолжаешь менять свой чёртов Embedded SQL, количество локальных переменных (а соответственно и инстанс, в которых ты флаги держишь) растёт, и все это превращается в классический спагетти код. Вот если б у меня был instance datastore, да ещё и не системный, а мой, который я заточил под доставание флажков которые так позарез моей событии/функции нужны, как бв всё было просто... Ну а про то когда надо многорядный Result Set тащить, то вообще о чём говорить? Во-первых datastore/datawindow делает block reads, а курсор тянет по одному ряду, лупы надо писать, локальные переменные и вся лабуда... Во-вторых datastore - умная datastructure, в которой уже все для итерирования, поиска и сортировки всё написано... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 18:46 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
2 ASCRUS Хотя понятно, что для каждой задачи все равно будут свои решения и нечто универсальное сделать невозможно Не хотелось бы флейма, но возьмусь утверждать, что в рамках ограничений: 1. Клиент-сервер 2. ASA or Oracle (о других серверах не могу ничего сказать) 3. Квалифицированная команда :-) на PB можно сделать нечто универсальное Маячок: describe/modify ("DataWindow.Table.Select"), describe/modify (<column> + ".tag") SQLPreview event SQL запрос в DW - Convert to syntax ... кто-нибудь добавит? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 20:30 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
PL99 Ну насчет универсального я поостерегся бы говорить, а вот насчет быстро писать крупные проекты на PB, делая их более гибкими и легче сопровождаемыми, чем на других средствах - я полностью согласен. Ну а про универсальность могу только одно сказать - все универсальное занимает больше времени разработки, получается кривым, ограниченным и тяжело переносимым в развивающиеся более современные стандарты и технологии. Лучше автоматизировать свой труд, создав библиотеки повторно используемых решений и алгоритмов (наглядный пример - PFC) и писать проект в рамках его границ постановки, а не делать из программы IDE с конструкторами окон и отчетов. IMHO это только мое личное мнение, развивать дальше эту тему не стоит, так как у каждого свое мнение на сей счет, хотя если не спорить друг с другом, а просто каждому высказать свое мнение с учетом своего опыта, то получилось бы познавательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2003, 21:56 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Black Savage писал: "...хотя я бы не стал ЗАПРЕЩАТЬ им пользоваться, как это делает Филипп, иногда лучше и проще применять именно Embedded SQL..." Полностью согласен. Действительно гораздо проще использовать Embeded SQL, в случае если мне необходимо достать 1- 2 значения из таблицы БД. Например я использую Embeded SQL в глобальных функциях, которые затем участвуют в Validation Expression при создании DataWindow object. Функциональность связанную с выбором значений из справочника никто не отменял, но при большом объеме вводимых данных, операторы как правило наизусть помнять коды (артикулы и т.д.) товаров, услуг и ещё бог знает чего. Поэтому для них ручной ввод кода зачастую удобнее использования справочника, вот для проверки введенных значений я и использую глобальные функции, в которых применяю embeded SQL и считаю, что это оправдано. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2003, 10:26 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Ermak , если б кто из моих подчинённых "для проверки введенных значений использовал глобальные функции, в которых применял embeded SQL и считал, что это оправдано", то очень быстро стал это считать в другом месте работы :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2003, 04:37 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Филипп ну у нас слава богу свободная страна и тут за такие мелочи никто никого никогда не увольняет :) Как там строго все у вас малость наслышаны, хотя в принципе все правильно - единую стратегию команды и дисциплину никто не отменял. Я заметил, что Вы уже и раньше высказавались против использования глобальных функций в DataWindow. Мне как начинающему было бы очень интересно услышать обоснования, почему их там не стоит использовать. Буду очень признателен за ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2003, 16:18 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Иметь под руками мощь data window и вспоминать про курсоры,где,на client ?Ваш код просто перепишут те,кто придёт за Вами... Я видел широкое использование Embedded Sql и расплаты за это-делали некую команду(update),она заваливалась на duplicate key и несла обратно код ошибки 0,все думали ,что дело сделано,а на самом-то деле... Когда я к ужасу нач.проекта сгородил невидимое dw и update пошел оттуда романтика сюрпризов сразу закoнчилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2003, 16:27 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
2 Филипп "если б кто из моих подчинённых "для проверки введенных значений использовал глобальные функции, в которых применял embeded SQL и считал, что это оправдано", то очень быстро стал это считать в другом месте работы :-)" В чем ваше решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 07:12 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
ASCRUS , что то у вас в России с юмором произошло? :-) Конечно уволить я никого за embedded SQL не уволю, но если увижу, то заставлю поменять :-) Опять же вы углядели мою неприязнь к глобальным функциям (что правда), а в данном случае речь об embedded SQL идёт. Тем не менее скажу вот что. Я считаю, что прелесть изобретенного Powersoftom dataobjecta заключается в том что он самодостаточен и самоописуем. Вставлять в него глобальные функции, значит увеличивать зависимость на внешние по отношению к нему факторы, я против этого. Ermak , я начинал заниматься РВ в начале расцвета классического client/servera, основными принципами было следующее 1) Minimize network traffic 2) Maximize processing on the client 3) If possible, move processing to the data, not data to the processing. Пример, который вы привели - проверка парвильности введённых данных против СТАТИЧНЫХ наборов кодов с помощью походов с клиента в БД - классический образец увеличения network traffic ни за что ни про что. Даже если вы не используете dddw, кашировать наборы кодов на клиенте - гораздо злегантнее, чем database hits. Если вы эти свои проверки в pre-update logic устраивали, это ещё пол беды, но вы же их небось в itemchanged event исполняли... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 08:29 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Я полностью согласен с Филиппом по данним вопросам. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 09:28 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Если мне необходимо сумму число преобразовать в сумму прописью ("столько-то руб. 00 коп"), то опять же использую для этого внешнюю ф-цию. Чем плохо? "Даже если вы не используете dddw, кашировать наборы кодов на клиенте - гораздо злегантнее, чем database hits." Кэшировать активно пополняемые справочники (7-10 тыс. записей) на клиенте - это элегантное решение? Не согласен. "Если вы эти свои проверки в pre-update logic устраивали, это ещё пол беды, но вы же их небось в itemchanged event исполняли..." Поподробнее, что имелось ввиду? Я говорил про использование свойства validation exp. для datawindow column. Каким образом можно контролировать правильность введенного пользователем значения? Как и в какой момент необходимо информировать пользователя о не правильно введеном значении? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 11:32 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Ermark Даную функцию можна реализовать в базовом обекте datawindow (u_dw) для вашего проекта ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 11:46 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
2 Mykola "Даную функцию можна реализовать в базовом обекте datawindow (u_dw) для вашего проекта" Если речь идет о сумме-прописью, то каким образом мне её результат подставить в dw? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 12:08 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
Ermak говорил "про использование свойства validation exp. для datawindow column." :-) Так вот и я о том же. Это значит, что у вас на КАЖДОМ itemchanged - database hit. Вот это и называется безобразие. Давайте на секунду представим, что подобное validation exp (с глобальной функцией зовущей Embedded SQL) у вас сидит на колонке с dddw edit style. Знаете что происходит, когда пользователь имеет фокус в такой колонке и жмет Up/Down Arrow Keys? Правильно, itemchanged event, причём с такой же скоростью, как repeat rate у keyboarda, и с такой же скоростью летят ваши database hitы. Вот так в вырожденным случае выглядит суть вашего подхода :-) Кэшировать активно пополняемые справочники (7-10 тыс. записей) , а так же пытаться из них делать dddws я безусловно не рекомендую, но валидировать данные в момент их изменения (а НЕ при попытке update), тоже несколько странно... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 18:29 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
"Давайте на секунду представим, что подобное validation exp (с глобальной функцией зовущей Embedded SQL) у вас сидит на колонке с dddw edit style". Филипп, я этого не говорил, и на колонке с dddw у меня такого никогда сидеть не может. К слову сказать, dddw для организации справочников мне не нравится (прооблемы с навигацией), а посему я его практически не использую, так что скорость database hit значительно меньше, чем того вырожденного случая, который вы привели. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 19:22 |
|
Курсор или datastore; Embedded SQL или объекты PB
|
|||
---|---|---|---|
#18+
К слову сказать, dddw для организации справочников мне не нравится (прооблемы с навигацией) Какие проблемы с навигацией? Не понимаю. При нормальных размерах справочников (< 100), лучше чем dddw для организации этого дела придумать что либо трудно, поэтому уже долгие и ПРОВЕРЕННЫЕ годы применятся в тысячах РВ приложений. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2003, 19:37 |
|
|
start [/forum/topic.php?fid=15&msg=32256414&tid=1339516]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 278ms |
total: | 410ms |
0 / 0 |