Форум » Clipper » "Error BASE/1077 Ошибка в аргументах: .NOT." » Ответить

"Error BASE/1077 Ошибка в аргументах: .NOT."

Gray: Кто может, да - поможет! Вот такая Х..нь выдается у меня после второго прохода, т.е. - обращения к глобальной переменной! Проект громоззкий, подсчитать сколько PRIVATE/PUBLIC - не получается (спешу в отпуск на Мальдивы :), и, прога не МОЯ! Далее - Clipper 5.30, ExoSpace (v2.1). Сунулся в И-нет, там только НИДЕРЛАНДЫ с латинской Америкой имеют такие проблеммы (на русском только в БЕСТе, и, то, исправили в 2006!) :( Кто не на Канарах - Откликнитесь! Могу выставить пример - оператор IF, и сравниваю логическую переменную на TRUE/FALSE. Думал - переполнение (>2048) PRIVATE/PUBLIC объяв (предыдущему прогроамеру - было по-чему-то проСче так реализовать свою идею), но нет, - в первый-то проход ВИДИТ!, а на следующий выдает - ["ЗАГОЛОВОК"]! (то бишь, ошибку!)

Ответов - 11

Andrey: Gray пишет: Кто не на Канарах - Откликнитесь! Я не на Канарах.... Пиши кусок кода где вылетает - иначе ничего не понятно !

PSP: http://www.itlnet.net/programming/program/Reference/c53g02c/ng28223.html Один из аргументов оператора сравнения - не логическая величина.

Dima: PSP пишет: Один из аргументов оператора сравнения - не логическая величина. +1

Gray: Функция в которой наблюдается ошибка BASE/1077 FUNCTION M301Init(nComPort, nBaudRate) local i, cYesNo PRIVATE lExitYesNo, nSec //lInitOk - порт уже инициализирован! 20160801 (функция!) i := 0 myalert(iif(lInitOk(),".T.",".F.")) // стандартный ALERT, только с рамкой в правом нижнем углу //if ! lInitOk() //запуск в первый раз? 20160801 cYesNo := iif(lInitOk(),".T.",".F.") myalert(cYesNo) if cYesNo == ".F." //// на втором проходе - ошибка! myalert("first!") IF ! COM_INIT(nComPort, nBaudRate, 'E', 8, 2) Message(9, 17, ; 'Невозможно инициировать COM-port: ' + Str(nComPort), ; LangStr("Language.dbf", "Error"), ; ColorStr("Color.dbf", "Error")) RETURN .F. END //............ //текст для работы с СОМ портом и оборудованием //............ IF i < 100 lExitYesNo := .T. ELSE Message(9, 17, ; 'ОШИБКА: АППАРАТ НЕ ОТВЕЧАЕТ', ; LangStr("Language.dbf", "Error"), ; ColorStr("Color.dbf", "Error")) lExitYesNo := .F. ENDIF lInitOk(.T.) //20160801 if lInitOk() myalert("Yes!") endif endif RETURN lExitYesNo //end of " M301Init(nComPort, nBaudRate) " //----------------------------------------------------------- function linitok (lflag) local flg //, spathf := getenv("TMP") + "\" + "flagm.dbf" spathf := "flagm.dbf" if pcount() = 0 if file(spathf) flg := .T. else flg := .F. endif else if valtype(lflag) = "L" if lflag = .T. fcreate(spathf) flg := .T. else ferase(spathf) flg := .F. endif else myalert("lInitOk - дай нормальный параметЕр!") endif endif return flg //------------------------------------------------------------------- Это последнее, что придумал - из глобальной (PUBLIC)переменной linitok := .F., сделал функцию ... :(

SergKis: Gray пишет if cYesNo == ".F." //// на втором проходе - ошибка! Сделайте так cYesNo := iif( valtype(cYesNo) == "C", cYesNo, ".F.") If cYesNo == ".F." ...

Gray: cYesNo - локальная, и, каждый раз попадая в (FUNCTION) M301Init() ----> ".F." Что меня не устраивает. Если же сделать так (не красиво) cYesNo := iif(lInitOk(),".T.",".F.") cYesNo := iif( valtype(cYesNo) == "C", cYesNo, ".F.") If cYesNo == ".F." ... то, (масло - маслянное), при втором обращении - Error BASE/1077 ...gg Пока определил для себя - lInitOk() работает снаружи. Вот и буду ставить условие перед вызовом M301Init(). Правда теперь надо столько текста перелопачивать! :( Проверил, работает! Осталось поймать "all bugs". Могу предположить - появление ошибки "Error BASE/1077 ..." может быть связано с большой вложенностью вызываемых процедур. Типа - "переполнение стека", которого явно быть не должно! Кто что думает?

Andrey: Gray пишет: Кто что думает? Делай проще конструкции программы, не пользуйся текстовыми значениями типа ".F." - для этого специально сделали логическую переменную = .F./.T.

Gray: Andrey пишет: Делай проще конструкции программы, Так и делаю, а текстовые - от отчаяния! Прога не моя, надо было быстро подправить, и, вот приходится копаться основательно!

Gray: переменная (public), объявленная в главном модуле проги, перестает быть видимой в прцессе работы программы. В моем случае при втором обращении (при первом - все на "Ура"!)

Dima: Gray пишет: переменная (public), объявленная в главном модуле проги, перестает быть видимой в прцессе работы программы. В моем случае при втором обращении (при первом - все на "Ура"!) Про эту переменную речь cYesNo ? Ну так он заявлена как Local в функции M301Init

Gray: Все оказалось до банальности просто: видимость переменных Public и Private! Мне было не_в_домек, что в чужой проге Private используется в качестве Local. От этого и все ТРАБЛЫ! Глубоко разбираться не стал - прога после Нового года, должна умереть. Подправил, и, отправил! Все! :) Всем СПАСИБО!



полная версия страницы