Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
Hi всем
обьясните, чего у нас не так

имеем формы Form_Клиент и Form_Редакция
в LOADE Form_Редакция прописано
PUBLIC pnSeek
pnSeek=0
IF SEEK (pnFind,"table1","pnCod") = .T.
        pnSeek=1
ENDIF

если просто запускаем Form_Редакция из меню проги , то все выходет нормально и в Debugger сразу после запуска появляеться pnSeek=0 или pnSeek=1
если же Form_Редакция запустить из Form_Клиент, то в Debugger переменная pnSeek вобще отсутствует

куда деваеться переменная в этом случае??????

спасиба
19 авг 07, 17:47    [4544612]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
BMJ
Member

Откуда: Москва
Сообщений: 270
CLEAR all не присутствует?
19 авг 07, 17:49    [4544614]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
описался. поправка. в коде конечно хотел написать
IF SEEK (pnFind,"table1",pnCod) = .T.
кавычки в спешке прилепил когда текст топика писал
19 авг 07, 17:51    [4544615]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
BMJ
CLEAR all не присутствует?

конешно нет!
19 авг 07, 17:52    [4544617]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8873
Снифф
куда деваеться переменная в этом случае??????

А в форме Form_Редакция Data Session случайно не private?
19 авг 07, 22:33    [4544907]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Снифф
PUBLIC pnSeek
pnSeek=0
IF SEEK (pnFind,"table1","pnCod") = .T.
        pnSeek=1
ENDIF

При повторном открытии формы должна быть ошибка на строке PUBLIC pnSeek, т.к. нельзя дважды объявить глобальную переменную. Если нет CLEAR ALL, то есть RELEASE pnSeek
Глобальные переменные лучше начинать с префикса g

Sergey Ch
А в форме Form_Редакция Data Session случайно не private?
Это не влияет на область видимости переменной.
20 авг 07, 07:20    [4545196]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
автор
При повторном открытии формы должна быть ошибка на строке PUBLIC pnSeek, т.к. нельзя дважды объявить глобальную переменную.

И где про это написано или кодом докажи
20 авг 07, 07:34    [4545205]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Dima T
Member

Откуда:
Сообщений: 15281
piva
автор
При повторном открытии формы должна быть ошибка на строке PUBLIC pnSeek, т.к. нельзя дважды объявить глобальную переменную.

И где про это написано или кодом докажи


И правда можно :) Каждый раз проверяю перед объявлением if type('...')='U' для одноразовой инициализации, почему-то подумал, проверка чтобы ошибки не было.

По остальным пунктам претензий нет?
20 авг 07, 07:57    [4545212]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Претензий нет

Скорее где-то в проге у автора - есть еще одна такаяже переменная, только походу она приватная и умирает там же в когде, убивая глобальную на корню, другого быть не может
20 авг 07, 08:01    [4545217]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
Sergey Ch
А в форме Form_Редакция Data Session случайно не private?
не понял
а что Data Session как-то связана с переменными?
у нас в форме Private, так кажеться это по барабану для PUBLIC
piva
...Скорее где-то в проге у автора - есть еще одна такаяже переменная, только походу она приватная и умирает там же в когде, убивая глобальную на корню, другого быть не может
нет. переменная используеться только в Form_Редакция, спецом щас проверяли через Поиск каждый обьект в ней. потом уже вообще все формы перелопатили в проекте.
переменая находиться только в Form_Редакция
20 авг 07, 08:56    [4545246]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Снифф
...переменная используеться только в Form_Редакция, спецом щас проверяли через Поиск каждый обьект в ней. потом уже вообще все формы перелопатили в проекте.
переменая находиться только в Form_Редакция

Переменная исчезает или не создается? Пошагово дебагером пройди. SET STEP ON поставь перед PUBLIC, м.б. это место не выполняется.
Если исчезает - ищи CLEAR или RELEASE. Других способов убить глобальную переменную нет.
Рекомендую строго придерживаться использования префиксов в именах, во избежание подобных проблем с областью видимости:
l - local
p - private
g - public
t - parameter
Назови переменную gnSeek

Если кроме этой формы она нигде не используется, то наверно можно сделать свойство ThisForm.nSeek и им пользоваться. Глобальные переменные лучше не делать без острой необходимости
20 авг 07, 09:32    [4545321]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Еще один момент - при объявлении через PRIVATE переменная не существует до ее инициализации:
public gnVar
gnVar = 1
do test
? gnVar && пишет 1
...

proc test
private gnVar
? type('gnVar') && = 'U'
? gnVar && Ошибка Variable GNVAR not found
return
20 авг 07, 09:47    [4545359]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
автор
Глобальные переменные лучше не делать без острой необходимости

Некоторые после разъяснения Цингауза и переделки поиска переменных в NTI фокса, теперь начали активно их использовать особенно в циклах
ЗЫ - Особенность 9-ки на, 7-ке, 8-ке это так не влияло ;)
20 авг 07, 09:47    [4545362]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Dima T
Member

Откуда:
Сообщений: 15281
piva
автор
Глобальные переменные лучше не делать без острой необходимости

Некоторые после разъяснения Цингауза и переделки поиска переменных в NTI фокса, теперь начали активно их использовать особенно в циклах
ЗЫ - Особенность 9-ки на, 7-ке, 8-ке это так не влияло ;)

Ссылку не дашь почитать что переделали.
20 авг 07, 09:59    [4545406]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
Dima T
Еще один момент - при объявлении через PRIVATE переменная не существует до ее инициализации
смотрите наш код, значение присваивается сразу
20 авг 07, 10:03    [4545421]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
2Dima T
Там было пояснение - вобщем занятная тема
http://forum.foxclub.ru/read.php?45,281675,284099#msg-284099
20 авг 07, 10:13    [4545450]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Снифф
Dima T
Еще один момент - при объявлении через PRIVATE переменная не существует до ее инициализации
смотрите наш код, значение присваивается сразу
В приведенном коде нет ошибки. Как проявляется ошибка, какой код выполняется до и какой после? Или это глюк дебагера?
Что происходит если в конце этого кода поставить MessageBox(type('pnSeek')) ? На 100% уверен что 'N', хотя судя по описанным симптомам должно быть 'U'.
Думаю без упрощенного примера не обойтись. Сделай отдельный проект с повтором ошибки и выложи.
20 авг 07, 10:25    [4545502]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
[quot Dima TДумаю без упрощенного примера не обойтись. Сделай отдельный проект с повтором ошибки и выложи.[/quot]да мы уж и так с другом упростили вопрос до крайности (((
21 авг 07, 10:25    [4551593]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Dima T
Member

Откуда:
Сообщений: 15281
Снифф
да мы уж и так с другом упростили вопрос до крайности (((
Ну тогда что осталось и выкладывай с инструкцией как ошибку повторить
21 авг 07, 10:37    [4551689]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
прошелмимо
Guest
Снифф

паблик переменные - зло

сделай виз.библ-ку , в ней сделай класс
в классе свойство

в программе подними объект на основ-и написанного класса
присвой свойству нужное значение

и пользуй

избежишь ненужных танцев + начнешь осваивать азы ООП
21 авг 07, 10:41    [4551722]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
прошелмимо
Guest
http://fox.wikis.com/wc.dll?Wiki~NamingConventionsVariables

и обрати внимание почему
выделили красным ...
21 авг 07, 10:52    [4551821]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
Спасибо. Действительно, пропробуем подойти по другому. Не знаю, разберемся ли в том, что посоветовали ссылкой, но попробуем обязательно.

За Сниффа
Снусмумрик
21 авг 07, 10:57    [4551860]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
прошелмимо
сделай виз.библ-ку , в ней сделай класс
в классе свойство
в программе подними объект на основ-и написанного класса
присвой свойству нужное значение
Значит так. Вот как мы поняли это дело.
Создали новый класс на основе Container, добавили в него новое свойсво Флаг, значение которого по умолчанию = .F. Поместили его на Form_Редакция, сделали невидимым. Вместо прежнего кода, приведенного здесь, написали:

IF SEEK (pnFind,"table1","pnCod") = .T.
thisform.контейнер.флаг=.t.
ENDIF

Дальше этого пока не пошли.
Правильно ли мы поняли про новый класс?

За Сниффа
Снусмумрик
22 авг 07, 13:16    [4559889]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
прошелмимо
Guest
не достаточно ли добавить форме свойство???

из класс Custom
поднимется невиз-й объект


давайт по-порядку
есть то-то и то-то
Вы желаете то-то и то-то

+ если можно небольшой архивчик с примером
и ткните хочу чтобы было так-то и так-то
22 авг 07, 13:29    [4559994]     Ответить | Цитировать Сообщить модератору
 Re: куда может дется объявленная переменная?  [new]
Снифф
Member

Откуда:
Сообщений: 125
Прямо гора с плеч. Все заработало.
Сейчас в проекте вместо 3-х глючивших глобальных переменных-флагов добавили в форму 3 новых свойства-флага, подредактировали соответственно код в объектах. И все пошло!
Снифф уже несколько дней с горя без пива пребывал. А теперь ошалел от радости и погнал в палатку за баклажкой.

Народ, спасибо за ликбез )))))))))))))))))))))))

За Сниффа
Снусмумрик
22 авг 07, 14:33    [4560461]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить