|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWist Вы уж совсем ... того ... мне мои ответы начали диктовать. Вы на форуме находитесь, а не в школе, диктант диктуете. ... Ну хорошо, оставим это. sg12PaulWist Вам нужен: PaulWist КОД КЛАССА ОБЁРТКИ НАД SQLEXEC() Что вас не устраивает в существующем классе? Базовый класс,... а кстати, на основе какого базового класса построен класс? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 15:11 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWist Какой у вас базовый класс? Лучше всего подходит класс Custom. Что еще вас смущает в существующем классе? ЗЫ. Это случаем не тот класс-самоубица от ДимыТ, который сам автор не смог запустить, потому что тот прилюдно просил его "убить"? И который сам автор загнал куда-то подальше, чтобы не брать себе на душу такой грех. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 15:40 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWist Какой у вас базовый класс? Лучше всего подходит класс Custom. ... ОК, вот уже предметный разговор. Хорошо, пусть будет Custom. У меня тоже Custom. sg12PaulWist Что еще вас смущает в существующем классе? ... Как инициализируется этот класс, те в какой момент происходит его создание (Creat/NewObject), поясню созданный на основе этого класса обьект является общим для приложения или же для каждого обьекта приложения создаётся свой экземпляр? sg12PaulWist ЗЫ. Это случаем не тот класс-самоубица от ДимыТ, который сам автор не смог запустить, потому что тот прилюдно просил его "убить"? И который сам автор загнал куда-то подальше, чтобы не брать себе на душу такой грех. Давайте условимся, у нас технический разговор, и не будем в нашем треде отвлекаться на других участников. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 16:06 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWistКак инициализируется этот класс, те в какой момент происходит его создание (Creat/NewObject), поясню созданный на основе этого класса обьект является общим для приложения или же для каждого обьекта приложения создаётся свой экземпляр? Это уже серьезный вопрос. Я бы посоветовал забыть, что это класс только для SQLEXEC() и начать на его основе создавать глобальный класс вообще для работы со всем SQL-сервером. Так как это тема достаточно посещаема, и надеюсь не только троллями, то могу остановиться на этом объемном вопросе подробнее. Но сразу замечу, что некоторые вопросы у меня еще "сырые" - в свое время их забросил за отсутствием необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 16:46 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWistКак инициализируется этот класс, те в какой момент происходит его создание (Creat/NewObject), поясню созданный на основе этого класса обьект является общим для приложения или же для каждого обьекта приложения создаётся свой экземпляр? Это уже серьезный вопрос. Я бы посоветовал забыть, что это класс только для SQLEXEC() и начать на его основе создавать глобальный класс вообще для работы со всем SQL-сервером. ... Отлично, задам вопрос по другому: Как инициализируется этот ГЛОБАЛЬНЫЙ класс, те в какой момент происходит его создание (Creat/NewObject), созданный на основе этого класса обьект является общим для приложения или же для каждого обьекта приложения создаётся свой экземпляр? sg12Так как это тема достаточно посещаема, и надеюсь не только троллями, то могу остановиться на этом объемном вопросе подробнее. Мы вроде договорились, обсуждать технические проблемы, а не личные качества участников. sg12Но сразу замечу, что некоторые вопросы у меня еще "сырые" - в свое время их забросил за отсутствием необходимости. Не ошибается тот кто ничего не делает, ... значит класс всё таки есть, можете его запостить на форуме? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 17:03 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWistКак инициализируется этот ГЛОБАЛЬНЫЙ класс, те в какой момент происходит его создание (Creat/NewObject), созданный на основе этого класса обьект является общим для приложения или же для каждого обьекта приложения создаётся свой экземпляр? Этот глобальный класс, назовем его _server должен находиться в том же .vcx, где у вас нахолится _application. Если заполнен его Init, то его нужно освободить во временную процедуру _server._init, к этому можно будет вернуться позже. Этот объект лучше добавлять AddObject() к goApp, но сейчас это у вас вызовет затруднения, знаю по себе. Поэтому сейчас лучше объявлять его как глобальную переменную goServer (условимся названия принимать мои, чтобы избежать ненужных разночтений). Он один и объявляется примерно после того, когда у вас закончились SET-настройки и установлены пути. PUBLIC goServer goServer = CREATEOBJECT('_server') (я использую CREATEOBJECT(), может и есть какая разница от NEWOBJECT(), мне неважно) Теперь его методы и свойства будут доступны как глобальные для всего приложения, и в него можно начать закачивать все необходимые процедуры для работы с SQL-сервером. Однако это не исключает, что в случае какой необходимости вы на местах можете писать свои процедуры. При закрытии приложения этот объект обязательно нужно закрывать, иначе он будет торчать в памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 18:23 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12Этот глобальный класс, назовем его _server должен находиться в том же .vcx, где у вас нахолится _application. ... А в другой библиотеке классов _server может находиться или обязательное условие одновременное нахождение с _application и чем грозит находжение их в разных библиотеках классов? sg12Если заполнен его Init, то его нужно освободить во временную процедуру _server._init, к этому можно будет вернуться позже. ... Поясните, что такое временная процедура _server._init это имя файла с таким расширением? sg12Поэтому сейчас лучше объявлять его как глобальную переменную goServer (условимся названия принимать мои, чтобы избежать ненужных разночтений). ... Не вопрос, договорились. sg12Он один и объявляется примерно после того, когда у вас закончились SET-настройки и установлены пути. PUBLIC goServer goServer = CREATEOBJECT('_server') (я использую CREATEOBJECT(), может и есть какая разница от NEWOBJECT(), мне неважно) ... Тут всё понятно, непонятно в следующей цитате: sg12Теперь его методы и свойства будут доступны как глобальные для всего приложения, и в него можно начать закачивать все необходимые процедуры для работы с SQL-сервером. ... Как закачивать (те с помощью чего) и какие процедуры необходимы для работы с SQL сервером, расскажите по подробнее? sg12При закрытии приложения этот объект обязательно нужно закрывать, иначе он будет торчать в памяти. Тут тоже не очень понятно, зачем этот обьект закрывать, ведь при повторном запуске не надо тратить ресурсы на его создание, а можно этот обьект повторно использовать, .. Вам не кажется, что лучше не закрывать, так более рационально, можно использовать ресурсы компа или всё таки необходимо его закрыть, тогда какие последствия могут возникнуть, если этот обьект не закрывать? А если просто выдать команду QUIT обьект всё рано останется в памяти? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 20:19 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWist _server вместе c _application необязательно в одной библиотеке (назовем _appobj.vcx/_appobj.vct), но намного удобнее, это будет часть фреймворка. Методы _server не используются (init,destroy,error ..., да и вообще это слово "метод" с _server не будем употреблять, только слово "процедуры"), но у вас ведь там могут быть коды. Чтобы они не пропали для следующей переделки, мы их сохраняем в специально созданных нами временных процедурах в этом же классе с приставкой "_". Куда-то нам их сейчас надо деть, после переделки кодов эти временные процедуры нам будут не нужны. "Закачивать" - неудачный термин. Вы будете создавать в этом классе новые нужные вам процедуры и постепенно переносить процедуры из разных углов и форм в этот класс. Разумеется, продуманно и с отладкой - теперь этот класс у вас "резиновый" и модифицируется. Но это надо смотреть конкретно, когда приступите к этому. Например, вы уже можете начать переносить процедуры подключения к серверу. Закрывать объекты обязательно, повторно они не используются. Вообще, с объектами правило жесткое - что создано, открыто - должно быть продуманно и вовремя закрыто. Иначе заставит это сделать обработчик ошибок, если вообще закроете программу. Да и по новой они не запустятся, запросят "убить", т.е. очистить из памяти. Команды типа QUIT, CLEAR ALL и т.п. в основном надо привыкать рассматривать как аварийные - значит где-то в программе недоделки, хотя они все уничтожают. Если при процедурном программированни такой метод сходит, то с объектами быстро выявляется через ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 21:47 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWist ...Методы _server не используются (init,destroy,error ..., да и вообще это слово "метод" с _server не будем употреблять, только слово "процедуры"), но у вас ведь там могут быть коды. Чтобы они не пропали для следующей переделки, мы их сохраняем в специально созданных нами временных процедурах в этом же классе с приставкой "_". Куда-то нам их сейчас надо деть, после переделки кодов эти временные процедуры нам будут не нужны. ... А, вот оно что, а я думал что "init,destroy,error" - это события, а не методы, и считал, что код в родительском классе не обязательно сохранять как отдельный метод, а достаточно пергрузить код связанный событиями и методами из дочернего класса и при необходимости код родителя вызвать из дочернего класса ... ну да ладно, как условились будем их называть процедурами. sg12PaulWist "Закачивать" - неудачный термин. Вы будете создавать в этом классе новые нужные вам процедуры и постепенно переносить процедуры из разных углов и форм в этот класс. ... Ок, не возражаю. sg12PaulWist Например, вы уже можете начать переносить процедуры подключения к серверу. Хорошо, а покажите код который Вы используете для подключения к серверу? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2013, 22:40 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWistХорошо, а покажите код который Вы используете для подключения к серверу? Коды у меня сырые, и вам придется довести их под свои нужды, как договорились. Вот то, что вы просили, вряд ли у вас вызовет затруднения: * Процедура DoSQL() LPARAMETERS tcCase LOCAL lcString,lnDisconnect,i DO CASE CASE tcCase == 'Otkr' *lcStr = goApp.oInfo.ServerList('SQL') lcStr = 'Соединение,Проверка,Параметры,Инициализация,БазаДанных,ИмяСервера,Логин,Регистрация' FOR i = 1 TO GETWORDCOUNT(lcStr,',') IF !THIS.DoSQLEx(GETWORDNUM(lcStr,i,',')) goSet.hSQL = 0 RETURN .F. ENDIF ENDFOR CASE tcCase == 'Zakr' lnDisconnect = SQLDISCONNECT(goSet.hSQL) IF lnDisconnect > 1 THIS.DoSQL_Error('Disconnect',lnDisconnect) ENDIF goSet.hSQL = 0 ENDCASE ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 10:05 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
Нет, ну мне вот всё-таки стало интересно. sg12, о чём говорил Владимир, и чего я не пойму - ну зачем процедура/метод с кейсом, если внутри кейса разные по смыслу действия производятся? Чем DoSQL('Otkr') и DoSQL('Zakr') лучше OpenConnection()/ExecuteSQL() и CloseConnection()? Смысл таких изменений какой? Вы уже 15-ю страницу только и делаете, что обвиняете других в троллизме, глупости и пр., но сами так и не удосужились внятно разъяснить преимущества своего подхода, или хотя бы недостатки других подходов. ЗЫ. На всякий - да, я прочитал всю ветку. Объяснений не было. Правда, посты с закидыванием собеседников какашками я сразу же пропускал, не читая до конца. ЗЗЫ. А что делает DoSQLEx? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 10:47 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWistХорошо, а покажите код который Вы используете для подключения к серверу? Коды у меня сырые, и вам придется довести их под свои нужды, как договорились. ... ОК, не вопрос. sg12...Вот то, что вы просили, вряд ли у вас вызовет затруднения: * Процедура DoSQL() LPARAMETERS tcCase LOCAL lcString,lnDisconnect,i DO CASE CASE tcCase == 'Otkr' *lcStr = goApp.oInfo.ServerList('SQL') lcStr = 'Соединение,Проверка,Параметры,Инициализация,БазаДанных,ИмяСервера,Логин,Регистрация' FOR i = 1 TO GETWORDCOUNT(lcStr,',') IF !THIS.DoSQLEx(GETWORDNUM(lcStr,i,',')) goSet.hSQL = 0 RETURN .F. ENDIF ENDFOR CASE tcCase == 'Zakr' lnDisconnect = SQLDISCONNECT(goSet.hSQL) IF lnDisconnect > 1 THIS.DoSQL_Error('Disconnect',lnDisconnect) ENDIF goSet.hSQL = 0 ENDCASE Два вопроса: 1. Что делает THIS.DoSQLEx(GETWORDNUM(lcStr,i,',')), хотелось бы увидеть код этой, как мы договарились, - процедуры. 2. goSet.hSQL - это как я понимаю хендл соединения, goSet - это скорее всего ещё один глобальый обьект (судя по названию) , собственно вопрос - покажите код, как значение hSQL становится отличным от нуля. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 10:49 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWistХорошо, а покажите код который Вы используете для подключения к серверу? Коды у меня сырые,Ну вот и отмазы пошли :) и вам придется довести их под свои нужды, как договорились. Вот то, что вы просили, вряд ли у вас вызовет затруднения: * Процедура DoSQL() LPARAMETERS tcCase LOCAL lcString,lnDisconnect,i DO CASE CASE tcCase == 'Otkr' *lcStr = goApp.oInfo.ServerList('SQL') lcStr = 'Соединение,Проверка,Параметры,Инициализация,БазаДанных,ИмяСервера,Логин,Регистрация' FOR i = 1 TO GETWORDCOUNT(lcStr,',') IF !THIS.DoSQLEx(GETWORDNUM(lcStr,i,',')) goSet.hSQL = 0 RETURN .F. ENDIF ENDFOR CASE tcCase == 'Zakr' lnDisconnect = SQLDISCONNECT(goSet.hSQL) IF lnDisconnect > 1 THIS.DoSQL_Error('Disconnect',lnDisconnect) ENDIF goSet.hSQL = 0 ENDCASEИ эти люди запрещают нам ковырятьтся в носу (с) :) Хотите я вам накидаю вот такие процеДУРЫ, авторов которых иногда так хочется долбануть чем-нить тяжелым? Ибо сопровождать их сплошное мучение. Вы почему решили, что открываете для нас что-то новое? ООП как раз и придумано в том числе и для избавления от таких портянок. ps: трюк с плохим и хорошим полицейскими таки сработал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 11:17 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWist Структура DoSQLEx() типовая: DO CASE CASE tcCase == 'Соединение' CASE tcCase == 'Проверка' * и т.д. ENDCASE Пункты заполняете своими кодами, они ведь у вас есть, только чуток их разделите по шагам и переделаете. Ну, не буду же я вам их из хелпов копировать, вы вроде не новичок. Вам эти коды надо будет тщательно отладить и во всех приложениях вызывать этот объект. Если у вас какая есть специфика в каком приложении, то вы добавляете еще CASE (т.е. решаете вопрос универсально в _server), но в строку lcStr вставляете нужный вызов в нужном месте уже в приложении. Если в каком приложении нет необходимости в каких пунктах, то вы их просто убираете из lcStr. Т.е. конфигурацию и порядок подключения вы создаете теперь уж не в каждом коде в приложении, а индивидуально одними маневрами с lcStr. Обратите внимание, что подлинная строка lcStr забита звездочкой для простоты изложения. Аналогична структура DoSQL_Error: DO CASE CASE tcCase == 'Connect' CASE tcCase == 'Disconnect' CASE tcCase == 'Exec' ENDCASE goSet это глобальный объект класса EMPTY, свойства которого заменяют все Public и константы. Создается в самом начале при запуске, о нем я упоминал в начале темы. После того, как вы его освоите, от него уже не откажетесь, удобная вещь. Ноу-Хау не мое, я давно еще его откуда-то слизал. tanglir. Разница в том, что в своем варианте вы на каждый код геройски бросаетесь каждый раз в каждом приложении как на амбразуру. Просмотрите темы, в основном выясняется - не там не та буква проставлена и поиск ее приравнивается к подвигу. Здесь же коды подразделяются, отлаживаются один раз в объектах и из приложений только вызываются. После этого ошибка может возникнуть только при передачи неверных параметров. Если у вас аллергия на DO CASE, то вы можете разделить процедуры и возиться с вызовами вместо Otkr/Zakr, с постоянными поисками нужных названий и ошибок в синтаксисе. Если вы в постах ищете только какашки, то это ваша проблема. Sergey Sizov Накидайте. Только напомню, что вы один раз накидывали, только не процедуры, а "сусликов". И не переоценивайте себя - здесь не только "полицейские", на компетентно сформулированные вопросы я отвечаю серьезно. И если уж сам tanglir начал просматривать тему - это что-то значит. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 12:39 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
>Разница в том, что в своем варианте вы на каждый код геройски бросаетесь каждый раз в каждом приложении как на амбразуру. Нет такой разницы - см. ниже. >Просмотрите темы, в основном выясняется - не там не та буква проставлена и поиск ее приравнивается к подвигу. Если "не та буква" проставлена внутри кейса, а не внутри процедуры, это как-то облегчит нахождение места ошибки?? >Если у вас аллергия на DO CASE, то вы можете разделить процедуры и возиться с вызовами вместо Otkr/Zakr, с постоянными поисками нужных названий и ошибок в синтаксисе. У меня аллергия на пихание в ду кейс всего подряд. И какая всё-таки разница, что искать - название процедуры или название параметра? Ну и ошибки синтаксиса опять же могут быть что в отдельной процедуре, что в одном из "кейс"ов... Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Код: sql 1. 2. 3. 4. 5. 6.
Вообще не понял. То есть имеется метод goApp.oInfo.ServerList('SQL'), который может возвращать некую строку. Потом в DoSQL эта строка разбивается на "слова", которые скармливаются DoSQLEx-у. Вопрос - вот, например, запустили DoSQL с параметром "открыть", получили строку со словом "соединение", скормили эту строку DoSQLEx-у. Что там в кейсе соответствующем будет? Соединение с сервером? А параметры соединения откуда возьмутся? Из другого свойства/метода объекта goApp? Или всё-таки формат строки lcStr несколько иной? Как по мне, так проще - чисто для читабельности даже - сделать отдельный метод для соединения, туда и параметры соединения можно сразу прописать (в смысле, как параметры метода), а не подтягивать не пойми что где-то посреди кода, который кому-то, возможно, ещё и в наследство достанется. >Если вы в постах ищете только какашки, то это ваша проблема. У меня проблема несколько иного характера - я их не ищу, но, к сожалению, они там есть. И при просмотре темы "находятся" сами собой. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 12:59 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
tanglirИли всё-таки формат строки lcStr несколько иной?Хотя нет, именно такой, количество параметров DoSQLEx не оставляет в этом сомнений. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 13:02 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
Я понял зачем этот огород с кэйсами. Чтоб в строчку последовательность действий написать и циклом вызвать по очереди Код: sql 1.
Только я так и не понял что такого криминального в последовательности вызовов методов Код: sql 1. 2. 3.
И как в этой однострочной схеме параметры передавать? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 13:12 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
Dima TИ как в этой однострочной схеме параметры передавать?Подозреваю, что так: tanglirА параметры соединения откуда возьмутся? Из другого свойства/метода объекта goApp? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 13:16 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
И чего делать когда код мегаметода DoSQLEx() дорастает до 64к и перестанет работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 13:34 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12Накидайте. Только напомню, что вы один раз накидывали, только не процедуры, а "сусликов". И не переоценивайте себя - здесь не только "полицейские", на компетентно сформулированные вопросы я отвечаю серьезно. И если уж сам tanglir начал просматривать тему - это что-то значит.Самолюбование продолжается :) Аргументов опять 0. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 13:40 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWist Структура DoSQLEx() типовая: DO CASE CASE tcCase == 'Соединение' CASE tcCase == 'Проверка' * и т.д. ENDCASE Пункты заполняете своими кодами, они ведь у вас есть, только чуток их разделите по шагам и переделаете. Ну, не буду же я вам их из хелпов копировать, вы вроде не новичок. Вам эти коды надо будет тщательно отладить и во всех приложениях вызывать этот объект. Если у вас какая есть специфика в каком приложении, то вы добавляете еще CASE (т.е. решаете вопрос универсально в _server), но в строку lcStr вставляете нужный вызов в нужном месте уже в приложении. Если в каком приложении нет необходимости в каких пунктах, то вы их просто убираете из lcStr. Т.е. конфигурацию и порядок подключения вы создаете теперь уж не в каждом коде в приложении, а индивидуально одними маневрами с lcStr. Обратите внимание, что подлинная строка lcStr забита звездочкой для простоты изложения. Аналогична структура DoSQL_Error: DO CASE CASE tcCase == 'Connect' CASE tcCase == 'Disconnect' CASE tcCase == 'Exec' ENDCASE goSet это глобальный объект класса EMPTY, свойства которого заменяют все Public и константы. Создается в самом начале при запуске, о нем я упоминал в начале темы. После того, как вы его освоите, от него уже не откажетесь, удобная вещь. Ноу-Хау не мое, я давно еще его откуда-то слизал. ... Фу блин, наконец-то мы добрались до сути вопроса Ниже я привел код в ваших терминах, что бы вам не мучаться,.... Заполните переменные server, uid, pwd в методе, блин "процедуре" DoSQLEx класса _Server, нажмите на Кнопку и ПОКАЖИТЕ КАК ПОЛУЧИТЬ алиас SqlResult в приватной сессии данных формы gridcommand ??? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
И после этого прочтите ещё раз ссылку от Алексея Цингауза. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 13:50 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
tanglir Если не та буква проставлена, то здесь вы отлаживаете раз и навсегда. Если же вы это делаете в приложении, то этим занимаетесь постоянно и каждый раз. Распутаем lcStr. В lcStr в приложении вы выставляете только те пункты, которые вам надо выбрать из DoSQL. К примеру, ведь к серверу можно подсоединиться не только через строку. Тогда будет так, с отлаженными кодами, они ведь кушать не просят: CASE tcCase == 'Соединение' CASE tcCase == 'Соединение2' CASE tcCase == 'Соединение3' В них и отрабатываются параметры соединений. Забегая вперед - они тоже хранятся в приложении, в том же goApp.oInfo, но в другой процедуре ConnectList. Но сама процедура их обработки находится в 'Соединении' и отлаживается тоже один раз. Но теперь в приложении у вас уже появится выбор, в зависимости от задачи: lcStr = 'Соединение' или, а не "и" lcStr = 'Соединение2' Или к примеру с параметрами подсоединения, у вас может несколько наработанных конфигураций: CASE tcCase == 'Параметры' CASE tcCase == 'Параметры2' ... И нужный один из них вы также выбираете в lcStr. Или, другой пример, в каком-то приложении вам необходимо обойтись без логина - вы просто не вписываете это слово в lcStr. Хотя в _server у вас уже есть отлаженный код, он в этом конкретном приложении вам не нужен. Если вам для читабельности что-то другое нужно - это ведь только структура кодов класса _server, а не библия. Коды вам в зубы - и вперед. Я совершенно спокойно отношусь, если что оказалось не так. ДимаТ. Если код процедуры разрастется, то он разделяется на несколько процедур. На самом деле этот код не так велик. С параметрами - допишите их, это же "сырой" код, в принципе только структура кода. Сейчас основное - понять смысл преобразований, поэтому я не загромождаю деталями. PaulWist CASE tcCase == 'SQLEXEC' пока перенесите в процедуру _DoSQLExec(), пропавший алиас будем искать там, но сначала надо подключиться к серверу. goServer.DoSQLEx('Connect') вынесите из формы в свою процедуру запуска приложения до открытия форм - сначала надо подключиться к серверу. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 14:42 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
sg12PaulWist CASE tcCase == 'SQLEXEC' пока перенесите в процедуру _DoSQLExec(), пропавший алиас будем искать там, ... Не вопрос Только давайте договоримся, код примера я привёл, а Вы теперь модифицируйте его так, что бы результат запроса select @@version попал в приватную сессию данных используя вызов SQLEXEC в методе глобального обьекта (так сказать даш на даш),.... потренируйтесь, и потом расскажите что у вас получится. sg12... но сначала надо подключиться к серверу. goServer.DoSQLEx('Connect') вынесите из формы в свою процедуру запуска приложения до открытия форм - сначала надо подключиться к серверу. И что изменится, какая разница в каком месте подключаться? Вы серьёзно думаете, что от перестановки мест вызова подключения что-то изменится в поведении обьектов? Прочтите ещё раз ссылку от Алексея Цингауза, подумай и переосмыслите что же делает пример. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 15:03 |
|
Общие принципы построения приложения в FoxPro
|
|||
---|---|---|---|
#18+
PaulWist Что-то вы меня совсем запутали с этим 'НЕТУ алиаса'. Добавьте в вашу форму эту процедуру _DoSQLExec() и вызовите ее из этой же кнопки. Алиас появляется? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2013, 16:33 |
|
|
start [/forum/topic.php?fid=41&msg=38160570&tid=1583148]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 270ms |
total: | 428ms |
0 / 0 |