powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Странность &Макроподстановок
25 сообщений из 26, страница 1 из 2
Странность &Макроподстановок
    #38326765
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
do while aN<aK
  wh='Dat_pr=aN'
  Count for &wh and a1=1 to v1
  ..............
  Count for &wh and a1=4 to v1
  Scan for &wh
    ..........
    ..........
  Endscan
  Sum Yet for &wh
  ......
  aN=aN+1
enddo


переменные aN и aK даты
так вот этих макроподстановок &wh в этом цикле около 30! всЁ работает.
как только добавляю ещё одну строчку с &wh (Count,Sum,...) код стопорится на строчке Scan for &wh в первой же итерации
пишет Command contains unrecognized phrase/keyword
коментарю любую строку с &wh -все работает.
Кто нибудь, объясните - что за капризы.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326819
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычные проблемы с макроподстановками. За это их и не рекомендуют использовать.
Вышла ошибка - запускай отладчик и смотри что в переменной wh в этот момент. 100% не то что ты ожидаешь.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326823
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже при добавлении любой строчки кода (без &),
даже вне цикла! происходит тот-же стопор !?!
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326831
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наиболее вероятная причина - переменная wh имеет область видимости PRIVATE или PUBLIC и содержимое меняется где-то в коде вызываемом из этого. Попробуй добавить в начало
Код: sql
1.
LOCAL wh
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326854
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wh действительно Privat, но переделав на Local результаты теже
конкрето &wh скрывает банальное 'Data_pr=aN'
vartype(aN) = D Пробила через отладчик во время работы кода с ошибкой и без
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326867
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще надо что в aN посмотреть. ну и
Код: sql
1.
LOCAL aN
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326872
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, всё же вместо макроподстановки использовать EVAL() ?
Попробовать добавить везде алиасы ( wh='table.Dat_pr=m.aN' ) и т.д.?
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326876
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не помогло, то надо пример кода с повторением ошибки. Чтобы запустить можно было.
Может правда глюк фокса.
Макроподстановками стараюсь не пользоваться там где можно без них обойтись.
В данном случае вместо макроподстановки можно SET FILTER использовать или сначала выборку в курсор, а потом с курсором работать.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326881
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще перед scan желательно добавить
Код: sql
1.
sele MyTable


а то может где переключилась текущая рабочая область.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326883
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Local aN тоже пробовала (((
странность в том что первые пару строк с &wh пропускает, а на Scan for &wh - ошибка
и ещё это происходит при добавлении любой строки кода - хоть в цикл, хоть до или после него даже без &wh
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326900
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаю с курсором
необходимость работы с &wh вызвана тем, что
'Dat_pr=aN' (конкретный день)
а иногда бывает 'BETW(Dat_pr,aN,GOMO(aN,1)-1)' (это сразу за месяц)
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326925
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilaРаботаю с курсором
необходимость работы с &wh вызвана тем, что
'Dat_pr=aN' (конкретный день)
а иногда бывает 'BETW(Dat_pr,aN,GOMO(aN,1)-1)' (это сразу за месяц)
что мешает сделать второй курсор?
Код: sql
1.
select * from Cursor1 where Dat_pr=aN into Cursor2


и дальше по Cursor2 без всяких макроподстановок

или хотя бы минимизировать количество макроподстановок
Код: sql
1.
select * from Cursor1 where &wh into Cursor2
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38326977
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ данном случае вместо макроподстановки можно SET FILTER использовать
Переделала ВСЁ.
В цикле поставила Set Filter To &wh
а со всех СOUNT,SUM... Scan сняла макроподстановки

и всё заработало! даже пошустрее стало.

Но но но - эти непредсказуемые &макроподстановки
на досуге погоняю ещё
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327012
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-хорошему в начало ставиться
Код: sql
1.
set step on


и дальше пошагово отладчиком смотреть что происходит.

А "нехорошесть" макроподстановок именно в этом и заключается: как что-нибудь вылезет, так устанешь ошибку искать.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327139
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMМожет, всё же вместо макроподстановки использовать EVAL() ?какой нафиг евал, у неё это часть строки фильтра...
Dima TМакроподстановками стараюсь не пользоваться там где можно без них обойтись.+1
Dima TА "нехорошесть" макроподстановок именно в этом и заключается: как что-нибудь вылезет, так устанешь ошибку искать.+много
ЛюдмilaРаботаю с курсором
необходимость работы с &wh вызвана тем, что
'Dat_pr=aN' (конкретный день)
а иногда бывает 'BETW(Dat_pr,aN,)' (это сразу за месяц)эээ...

Код: sql
1.
2.
dbeg=aN
dend=iif(prevedmedved, aN, GOMO(aN,1)-1)

и потом
Код: sql
1.
BETW(Dat_pr,dbeg,dend) --без всяких там мокропостановок

Не? Или есть ещё некий третий вариант, который в данную схему не впишется?
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327372
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из хелпа:

Операторы макроподстановки, фигурирующие в командах DO WHILE, FOR и SCAN, вычисляются только в начале цикла и при последующих итерациях не пересчитываются. Любые изменения в переменной памяти или элементе массива, происшедшие за время работы цикла, не распознаются.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327514
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странность в том, что всё работало правильно.
wh=iif(Den,'Dat_pr=aN','BETW(Dat_pr,aN,GOMO(aN,1)-1'), в цикле меняется только переменная aN
но про добавлении нескольких строк кода возникала ошибка.
т.е. ~2100 строк (неполенилась-сосчитала) - работает, а при добавлении ещё одной строки (куда угодно), даже типа rr=Recno() уже выдает ошибку. и спотыкается на первом же Scan for &Wh.
Затем убираешь любую - работает.
Данный код выполняет (серьезную) выгрузку данных в EXCEL и вот за 2-3 года разбух до таких размеров, что крышу сносит у компа.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327526
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмila,

по пробуйте оптимизировать код.
разбить на подпроцедуры
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327533
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этим и занимаюсь.
Основной код писался года 2-3 назад.
Сейчас с улыбкой правлю свои творения-делитанта
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327537
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмila делит антаЛюбите всё удалять? :)
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327582
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilaСтранность в том, что всё работало правильно.
wh=iif(Den,'Dat_pr=aN','BETW(Dat_pr,aN,GOMO(aN,1)-1'), в цикле меняется только переменная aN
но про добавлении нескольких строк кода возникала ошибка.
т.е. ~2100 строк (неполенилась-сосчитала) - работает, а при добавлении ещё одной строки (куда угодно), даже типа rr=Recno() уже выдает ошибку. и спотыкается на первом же Scan for &Wh.
Затем убираешь любую - работает.
Данный код выполняет (серьезную) выгрузку данных в EXCEL и вот за 2-3 года разбух до таких размеров, что крышу сносит у компа.
Какая у Вас версия FoxPro?

До VFP8 включительно максимальный размер одного скомпилированного программного модуля не может превышать 64Кб. А в версии VFP9 - максимальное количество символов в одном файле не должно превышать 65536 символов

Попробуйте разбить Ваш файл PRG на несколько файлов. Возможно, Вы как раз и вышли на этот предел...
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327817
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirЛюбите всё удалять? :)
Ну нет! такого за собой не замечала.
А вот оптимизацией занимаюсь частенько. Т.к. время идет - всё меняется. И я стараюсь не отставать. Поэтому код написанный мною ранее кажется мне сейчас "делитанским" - прогрессирую. ;)
==========
Проект написан на FoxPro9.
по поводу ограничений, то всё это "торнадо-безобразие" происходит в событии Form...CommandX.Click
Cлегка оптимизировав код ошибка исчезла. И сам этот модуль меньше не стал! мало того (ради эксперимента) добавила туда с десяток строк - тоже всё работает.

Солидарна с участником Dima_T - использовать макроподстановки с осторожностью (ведь воспользовавшись построчной отладкой ничего выявить не удалось) . И хорошо что выскочила ошибка программы, а еслибы этот глюк приводил к логической ошибке и получали бы мы недостоверные отчеты! типа 2+2=5 и т.д.

а все .prg файлы я тоже проверю они у меня тоже не маленькие.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38327891
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilatanglirЛюбите всё удалять? :)
Ну нет! такого за собой не замечала.
Это он мягко намекнул на орфографические ошибки. тынц Вроде все браузеры их подчеркивают при наборе текста. Надо просто обращать на это внимание.
Людмilaведь воспользовавшись построчной отладкой ничего выявить не удалось
Вполне возможно вылез какой-то редкий баг в движке фокса. Если так, то только переделать код чтоб работало, MS исправлять не будет.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38328130
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

В хелпе же написано, что это не "редкий баг", а так задумано.
Нагнали туману с макроподстановками.
Было же сразу: "код стопорится на строчке Scan for &wh ...".
Внимательнее надо работать с циклами.
...
Рейтинг: 0 / 0
Странность &Макроподстановок
    #38328342
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12Dima T

В хелпе же написано, что это не "редкий баг", а так задумано.
Нагнали туману с макроподстановками.
Было же сразу: "код стопорится на строчке Scan for &wh ...".
Внимательнее надо работать с циклами.
Вот ты какой-то кусок хэлпа скопипастил, не глядя что он в данном случае вообще ни при чем, а теперь еще чего-то тут доказываешь.
Посмотри на пример из первого поста и перечитай свой копипаст. А потом объясни каким боком он к теме топика относится.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Странность &Макроподстановок
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]