|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12Добавьте в вашу форму эту процедуру _DoSQLExec() и вызовите ее из этой же кнопки. Это ж отстало-ущербное процедурное программирование Как же свелое будущее: sg12избавим наши формы от необходимости чуть не в каждой писать индивидуально эти же процедуры, от которых рябит в глазах. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 16:55 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWist Что-то вы меня совсем запутали с этим 'НЕТУ алиаса'. Добавьте в вашу форму эту процедуру _DoSQLExec() и вызовите ее из этой же кнопки. Алиас появляется? Ну, так дело не пойдёт, мы же вроде договорились, я написал тестовый пример, а вы модифицируете его и показываете результат,... те добавьте в форму процедуру и запостите код на форуме. PS но не забудьте про парадигму ООП, что бы в итоге не вышло процедурного программирования :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 17:24 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
Dima T[Это ж отстало-ущербное процедурное программирование Не спешите. Надо сначала найти этот алиас. ООП не означает наличие аллергии на процедурное программирование. В фоксе ведь предусмотрено SET PROCEDURE TO, которым мы можем подключить (и подключаем) глобальный процедурный модуль mainutil.prg А там мы можем на законных основаниях тоже глобально разместить эту процедуру DoSQLEXec(). И т.п., если возникнет в этом необходимость. И если в форме этот алиас найдется, то эту процедуру мы можем глобально разместить в родительском классе без ущерба для здоровья. Но пока разберемся с тем, что есть, не все еще потеряно. RAZ_DVA_TRI Вы не могли бы разместить здесь полностью этот свой код с картинки. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 17:26 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWist Давайте сначала найдем этот алиас. Он появился? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 17:28 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWist Давайте сначала найдем этот алиас. Он появился? Вы тестовый код-то запускали? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 17:39 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWistsg12PaulWist Давайте сначала найдем этот алиас. Он появился? Вы тестовый код-то запускали? Нет. Я вам вполне доверяю. Наоборот, у меня интерес, чтобы вы (и не только вы) нашли как можно больше ошибок и недоработок. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 18:15 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12Наоборот, у меня интерес, чтобы вы (и не только вы) нашли как можно больше ошибок и недоработок. Я нашел глобальный косяк. Ошибку проектирования ООП приложения. Вот он Код: sql 1.
Это же хэндл соединения. единственная связь с БД !!! Его надо максимально изолировать от остального кода приложения, а то вдруг какой криворучка напишет Код: sql 1.
и все. капец. Инкапсуляцию в ООП ведь придумали не зря. Надо hSQL объявить PRIVATE и никуда не давать даже через методы goSet, а то криворучка напишет Код: sql 1.
и опять капец. Чего делать будем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 18:29 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12, Ты гений ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 18:51 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
Dima TЧего делать будем? Если честно, то я и сам сомневаюсь, насколько целесообразно загонять хендл сервера в goSet - уж больно он перегружен параметрами и процедурами, которые с ними работают. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 19:05 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12Dima TЧего делать будем? Если честно, то я и сам сомневаюсь, насколько целесообразно загонять хендл сервера в goSet - уж больно он перегружен параметрами и процедурами, которые с ними работают. и какие будут предложения? Применение ООП это не только повторное использование кода. Второй плюс инкапсуляции снижение ошибок при командной разработке, тут опытный разработчик пишет ядро, инкапсулирует все критически важное в свои классы, защищая ядро от ошибок неопытного, которому доверено незначительная часть работы. А тут мы всем и вся хендл сервера раздаем. Может явно его закрывать никто не будет, но запросто могут, например, запрос сделать с докачкой (.FetchAsNeeded = .T.) и тут все работать перестанет пока результат не докачался. Поэтому следуя правилам ООП надо прятать хэндл глубоко и доверять его использование только проверенному на 10 раз коду. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 19:27 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12Если не та буква проставлена, то здесь вы отлаживаете раз и навсегда. Если же вы это делаете в приложении, то этим занимаетесь постоянно и каждый раз.Нет. Одну и ту же букву, дествительно, можно отладить либо "раз и навсегда", либо "постоянно". Но никакой разницы между тем, находится эта буква в одной большой процедуре под кейсом или же она находится в отдельной процедуре, нет. Если всё-таки разница есть, объясните подробнее, в чём же именно она заключается. sg12В lcStr в приложении вы выставляете только те пункты, которые вам надо выбрать из DoSQL. К примеру, ведь к серверу можно подсоединиться не только через строку. Тогда будет так, с отлаженными кодами, они ведь кушать не просят: CASE tcCase == 'Соединение' CASE tcCase == 'Соединение2' CASE tcCase == 'Соединение3' В них и отрабатываются параметры соединений. Забегая вперед - они тоже хранятся в приложении, в том же goApp.oInfo, но в другой процедуре ConnectList. Но сама процедура их обработки находится в 'Соединении' и отлаживается тоже один раз.Отлично, см. выше, я уже упоминал, что можно сделать процедуру ConnectSQL. А в неё уже передавать... да хоть имя соединения, хоть напрямую его параметры - кто как посчитает нужным. И она точно так же "отлаживается один раз". В чём преимущество вашего подхода? sg12Но теперь в приложении у вас уже появится выбор, в зависимости от задачи: lcStr = 'Соединение' или, а не "и" lcStr = 'Соединение2'Что значит "или, а не и"? В моём варианте тоже есть выбор - какие параметры передадим в ConnectSQL, такое соединение и получим. sg12Или, другой пример, в каком-то приложении вам необходимо обойтись без логина - вы просто не вписываете это слово в lcStr."без логина" - в смысле, без соединения с сервером? Отлично, я просто не буду вызывать в этом приложении ConnectSQL :) Или это означало "используя некие дефолтные параметры соединения"? Опять же нет разницы, как к этим параметрам обращаться - из кейса или из отдельной процедуры. sg12Коды вам в зубы - и вперед.Пока что эти коды основаны на идее, применять которую я не вижу особого смысла. Так что пытаться в зубы мне их совать ещё рановато - не возьму. sg12Если код процедуры разрастется, то он разделяется на несколько процедур.Ну так а какой тогда вообще смысл в это горожении огорода с кейсами, если в конце концов всё равно приходится делить? Кстати, а по какому принципу делите? Что оставляете в "старой" процедуре, что в "новую" переходит? sg12Сейчас основное - понять смысл преобразований+1 Я вот пока так и не понимаю. Точнее, "смысл" я понимаю, но не вижу существенных отличий в лучшую сторону от "не-дукейсового" подхода. Таких, чтобы всё бросать и срочно переписывать весь код. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2013, 05:41 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWistпропущено... Вы тестовый код-то запускали? Нет. Я вам вполне доверяю. Наоборот, у меня интерес, чтобы вы (и не только вы) нашли как можно больше ошибок и недоработок. 1. У меня вопрос - а Вы умеете/знаете как запустить приведённый тестовый код? и если знаете, то что вам помешало это сделать? 2. Дык, я уже чуть ли не неделю пытаюсь получить код класса для SQLEXEC() написанный вами, а кода всё нет и нет,... обьясните, как можно найти ошибку, в том чего нет. Судя по всему, такого кода вы никогда не писали, а честно признаться "религия" не позволяет хотя я могу ошибаться. 3. Главная ошибка в самом принципе построения, предложенный подход используется в процедурном программировании, в ООП совсем другие "парадигмы", причём вариантов реализации достаточно много, собственно об этом уже многие говорили, в том числе и ВладимирМ :) То что Вы предлагаете - это бредсивкэйбл, через это проходят почти все новички,... ничего личного, просто констатация факта. 4. Если есть конкретные вопросы, то задавайте, лучше всего в таком виде: "я делаю так-то и так-то, получается то-то, а хочу получить то-то" PS Ещё раз повторю, ничего личного. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2013, 09:37 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWist Переход на избитые темы типа "СамТыКто" и "КтоТытакой" не является аргументом в таких вопросах. Такой класс имеется в поставке VFP9, находится в FFC-dataquery.vcx-execsp, вполне доступен. Он тоже глобальный и перетаскивается мышкой на формы. Я немного просмотрел материалы по этому вопросу. Проблема вами изложена достаточно четко, но она неоднозначна. Во избежание казусов возможным решением является передача в процедуру goServer.DoSQLExec() как параметров DS или THISFORM, с последуюющей обработкой сессии. Т.е. примерно так, как на картинке несколькими постами выше. Еше один глобальный класс на основе Custom. Создайте его под именем _mediator в новой библиотеке _custobj.vcx. Добавьте в него эту процедуру DoSQLExec(). Затем откройте свою форму и мышкой добавьте туда этот объект под именем oMediator. Тогда строка вызова из кнопки примет вид THISFORM.oMediator.DoSQLExec(). Как видите, решений достаточно и нет необходимости в вашем классе. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2013, 17:07 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
Модератор: Есть предложение закрыть тему, так как посты постоянно переходят на обсуждение личных качеств участников дискуссии... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2013, 00:18 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
Sergey Ch Вернемся к теме. Вопрос: Что означает "правильно спроектированное приложение"? Мое мнение - этот термин в Фоксе игнорируется и под этим понятием почти каждый понимает свое творчество. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2013, 09:14 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2013, 09:17 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
RAZ_DVA_TRIsg12RAZ_DVA_TRI Вы не могли бы разместить здесь полностью этот свой код с картинки. тама Спасибо. Емкое решение. PaulWist Вот еще код установки DS из поставки VFP9: LOCAL liSession liSession = SET("DATASESSION") DO CASE CASE VARTYPE(_SCREEN.ACTIVEFORM.DATASESSIONID) = "N" AND liSession # _SCREEN.ACTIVEFORM.DATASESSIONID SET DATASESSION TO (_SCREEN.ACTIVEFORM.DATASESSIONID) CASE VARTYPE(_SCREEN.ACTIVEFORM.PARENT.DATASESSIONID) = "N" AND liSession # _SCREEN.ACTIVEFORM.PARENT.DATASESSIONID SET DATASESSION TO (_SCREEN.ACTIVEFORM.PARENT.DATASESSIONID) OTHERWISE * we're in the right datasession already ENDCASE ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2013, 09:50 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12Вопрос: Что означает "правильно спроектированное приложение"? Мое мнение - этот термин в Фоксе игнорируется и под этим понятием почти каждый понимает свое творчество. И как много "творчества" было проанализировано для столь серьезного заявления? Какая была репрезентативность выборки? и неплохо было бы услышать с чем сравнивалось, т.е. что подразумевается под словами "Мое мнение". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2013, 20:22 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
Dima Tsg12Вопрос: Что означает "правильно спроектированное приложение"? Мое мнение - этот термин в Фоксе игнорируется и под этим понятием почти каждый понимает свое творчество. И как много "творчества" было проанализировано для столь серьезного заявления? Какая была репрезентативность выборки? и неплохо было бы услышать с чем сравнивалось, т.е. что подразумевается под словами "Мое мнение". Почему же вы так высокомерно ставите слово "творчество" в кавычки, скромностью вас не попрекнешь. Я просматриваю и изучаю почти все, что более-менее связано с этой тематикой. Что и вам уже советовал, чтобы не выдумывали новые теории. Могу сказать, что отдельных решений очень много хороших, и по отдельности большинство вопросов было решено еще лет пять назад. Но все они канули в пустоту из-за отсутствии в фОксе концепции программирования - некуда внедрять, у каждого свой паровоз. Сравнивать - хотя бы здесь, с мнением поочередных ГУРУ. Аргументов мизер, в основном абстрактный треп с передергиванием понятий. Не говоря уже об основном козыре - примитивных комментариях моей личности. Даже на примере вашего учебного SQLEXEC-чудо класса это видно. Если вы опять рветесь "мериться", могу разнообразить. К примеру, тот сайт, с которого вы так гордо сумели скопировать один пример, у меня почти весь давно уже находится в черновом классе. Сумеете перевести хотя бы одну статью - покажу как это делается. Или вот вам начало кода универсального объекта oWinapi, работающего с winapi-функциями непосредственно в формате из MSDN. DO CASE CASE tcCase == 'Fun' lcString = THIS.DoEx('List','Fun',tcName) IF EMPTY(lcString) MESSAGEBOX('Ошибка ввода. Функция не определена.') RETURN .F. ENDIF THIS.DoEx('Object','Fun',lcNameObj) WITH goWinapi lcFile = GETWORDNUM(lcString,2,'~') lcError = GETWORDNUM(lcString,3,'~') lcResult = GETWORDNUM(lcString,4,'~') lcReturn = GETWORDNUM(lcString,5,'~') lcString = GETWORDNUM(lcString,7,'~') lcDeclare = GETWORDNUM(lcString,1,'(') lcDeclare = THIS.DoEx('Type','Declare',lcDeclare) lcString = GETWORDNUM(GETWORDNUM(lcString,2,'('),1,')') THIS.DoEx('Type','Fun',lcString) lcStr = '' FOR i = 1 TO ALEN(.aWinapi,1) lcStr = lcStr + ',' + .aWinapi[1,1] + ' ' + IIF(.aWinapi[1,3],'@','') + ' ' + .aWinapi[1,2] ENDFOR lcDeclare = lcDeclare + ' IN ' + lcFile + ' AS ' + 'w_' + tcName + ' ' + SUBSTR(lcStr,2) DECLARE &lcDeclare lcStr = '' FOR i = 1 TO ALEN(.aWinapi,1) lcStr = lcStr + ',' + IIF(.aWinapi[1,3],'@','') + 'tuParam' + ALLTRIM(STR(i)) ENDFOR lcStr = 'w_' + tcName + '(' + SUBSTR(lcStr,2) + ')' luResult = &lcStr IF !EMPTY(lcError) AND !EMPTY(lcResult) AND EVALUATE(lcResult) THIS.DoError(lcError,lcResult) ENDIF CLEAR DLLS &lcAlias ENDWITH RELEASE goWinapi RETURN EVALUATE(lcReturn) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2013, 17:46 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12Почему же вы так высокомерно ставите слово "творчество" в кавычки, скромностью вас не попрекнешь. Я просматриваю и изучаю почти все, что более-менее связано с этой тематикой. Что и вам уже советовал, чтобы не выдумывали новые теории. Могу сказать, что отдельных решений очень много хороших, и по отдельности большинство вопросов было решено еще лет пять назад. Но все они канули в пустоту из-за отсутствии в фОксе концепции программирования - некуда внедрять, у каждого свой паровоз. Сравнивать - хотя бы здесь, с мнением поочередных ГУРУ. Аргументов мизер, в основном абстрактный треп с передергиванием понятий. Не говоря уже об основном козыре - примитивных комментариях моей личности. Даже на примере вашего учебного SQLEXEC-чудо класса это видно. Если вы опять рветесь "мериться", могу разнообразить. К примеру, тот сайт, с которого вы так гордо сумели скопировать один пример, у меня почти весь давно уже находится в черновом классе. Сумеете перевести хотя бы одну статью - покажу как это делается. Потрясающий пример скромности :) Как обычно: в чужом глазу и т.д. И обязательные ГУРУ в тему и не в тему :)Или вот вам начало кода универсального объекта oWinapi, работающего с winapi-функциями непосредственно в формате из MSDN. DO CASE CASE tcCase == 'Fun' ... DECLARE &lcDeclare ... luResult = &lcStr ... Еще одно потрясение :) Потрясающе по новизне, оригинальности, форматированию :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2013, 18:17 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
И тут же следует подтверждение ПустоТрепа, даже попытка разнообразить не помогла. Очень уж кому-то хочется, чтобы я его к гуру причислил. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2013, 18:50 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12 АнекдотНовичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался! Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется. Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами! Старожил: Какое дерево? Ты вообще соображаешь, что говоришь? Новичок: Чем мне нравиться этот форум - из двух ответов ниодного конкретного. Одни вопросы неподелу! Старожил: Не нравится - тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить. Новичок: Не знаите - лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ!!! Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю!!! А от вас нормального ответа недождёшся!!! Прохожий: Самое крепкое дерево - дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность: Новичок: Спасибо, братан! То что нужно!!! Вы выступаете в роли автора проекта деревянного небоскреба. Проблема в том, что Вы сейчас просто не в состоянии понять то, что Вам пытаются объяснить. Но не потому, что это что-то сложное или заумное. А по той причине, что Вы уже придумали для себя некий примерный ответ и все то, что не попадает в Ваш "шаблон ответа" просто отбрасывается. Вы не можете сейчас адекватно воспринять ответ, что "небоскребы из дерева не строят". Вы уже настроились на то, что Вам скажут породу дерева или способ его обработки. Любой другой вариант ответа воспринимается Вами как подколки, наезды, пустотреп и т.п. "Ведь у дедушки ничего не ломается!" Ну, что же, "берите дуб". Через год..полтора посмотрим, что у Вас получится... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2013, 20:14 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
ВладимирМ И как вы мне прикажете воспринимать теперь эти ваши психологические опыты? Детсад какой-то - дубы, сосны, колобка только не хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2013, 20:46 |
|
|
start [/forum/topic.php?fid=41&msg=38167012&tid=1583148]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 427ms |
0 / 0 |