|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Есть код Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
переменные aN и aK даты так вот этих макроподстановок &wh в этом цикле около 30! всЁ работает. как только добавляю ещё одну строчку с &wh (Count,Sum,...) код стопорится на строчке Scan for &wh в первой же итерации пишет Command contains unrecognized phrase/keyword коментарю любую строку с &wh -все работает. Кто нибудь, объясните - что за капризы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 13:57 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
обычные проблемы с макроподстановками. За это их и не рекомендуют использовать. Вышла ошибка - запускай отладчик и смотри что в переменной wh в этот момент. 100% не то что ты ожидаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:21 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Даже при добавлении любой строчки кода (без &), даже вне цикла! происходит тот-же стопор !?! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:22 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Наиболее вероятная причина - переменная wh имеет область видимости PRIVATE или PUBLIC и содержимое меняется где-то в коде вызываемом из этого. Попробуй добавить в начало Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:28 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
wh действительно Privat, но переделав на Local результаты теже конкрето &wh скрывает банальное 'Data_pr=aN' vartype(aN) = D Пробила через отладчик во время работы кода с ошибкой и без ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:39 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
еще надо что в aN посмотреть. ну и Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:43 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Может, всё же вместо макроподстановки использовать EVAL() ? Попробовать добавить везде алиасы ( wh='table.Dat_pr=m.aN' ) и т.д.? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:45 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Если не помогло, то надо пример кода с повторением ошибки. Чтобы запустить можно было. Может правда глюк фокса. Макроподстановками стараюсь не пользоваться там где можно без них обойтись. В данном случае вместо макроподстановки можно SET FILTER использовать или сначала выборку в курсор, а потом с курсором работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:47 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
еще перед scan желательно добавить Код: sql 1.
а то может где переключилась текущая рабочая область. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:50 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Local aN тоже пробовала ((( странность в том что первые пару строк с &wh пропускает, а на Scan for &wh - ошибка и ещё это происходит при добавлении любой строки кода - хоть в цикл, хоть до или после него даже без &wh ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:50 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Работаю с курсором необходимость работы с &wh вызвана тем, что 'Dat_pr=aN' (конкретный день) а иногда бывает 'BETW(Dat_pr,aN,GOMO(aN,1)-1)' (это сразу за месяц) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 15:00 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
ЛюдмilaРаботаю с курсором необходимость работы с &wh вызвана тем, что 'Dat_pr=aN' (конкретный день) а иногда бывает 'BETW(Dat_pr,aN,GOMO(aN,1)-1)' (это сразу за месяц) что мешает сделать второй курсор? Код: sql 1.
и дальше по Cursor2 без всяких макроподстановок или хотя бы минимизировать количество макроподстановок Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 15:13 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Dima TВ данном случае вместо макроподстановки можно SET FILTER использовать Переделала ВСЁ. В цикле поставила Set Filter To &wh а со всех СOUNT,SUM... Scan сняла макроподстановки и всё заработало! даже пошустрее стало. Но но но - эти непредсказуемые &макроподстановки на досуге погоняю ещё ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 15:42 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
По-хорошему в начало ставиться Код: sql 1.
и дальше пошагово отладчиком смотреть что происходит. А "нехорошесть" макроподстановок именно в этом и заключается: как что-нибудь вылезет, так устанешь ошибку искать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 16:01 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
AndreTMМожет, всё же вместо макроподстановки использовать EVAL() ?какой нафиг евал, у неё это часть строки фильтра... Dima TМакроподстановками стараюсь не пользоваться там где можно без них обойтись.+1 Dima TА "нехорошесть" макроподстановок именно в этом и заключается: как что-нибудь вылезет, так устанешь ошибку искать.+много ЛюдмilaРаботаю с курсором необходимость работы с &wh вызвана тем, что 'Dat_pr=aN' (конкретный день) а иногда бывает 'BETW(Dat_pr,aN,)' (это сразу за месяц)эээ... Код: sql 1. 2.
и потом Код: sql 1.
Не? Или есть ещё некий третий вариант, который в данную схему не впишется? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 17:22 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Из хелпа: Операторы макроподстановки, фигурирующие в командах DO WHILE, FOR и SCAN, вычисляются только в начале цикла и при последующих итерациях не пересчитываются. Любые изменения в переменной памяти или элементе массива, происшедшие за время работы цикла, не распознаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 20:43 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Странность в том, что всё работало правильно. wh=iif(Den,'Dat_pr=aN','BETW(Dat_pr,aN,GOMO(aN,1)-1'), в цикле меняется только переменная aN но про добавлении нескольких строк кода возникала ошибка. т.е. ~2100 строк (неполенилась-сосчитала) - работает, а при добавлении ещё одной строки (куда угодно), даже типа rr=Recno() уже выдает ошибку. и спотыкается на первом же Scan for &Wh. Затем убираешь любую - работает. Данный код выполняет (серьезную) выгрузку данных в EXCEL и вот за 2-3 года разбух до таких размеров, что крышу сносит у компа. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 02:04 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Людмila, по пробуйте оптимизировать код. разбить на подпроцедуры ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 03:40 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Этим и занимаюсь. Основной код писался года 2-3 назад. Сейчас с улыбкой правлю свои творения-делитанта ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 04:46 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Людмila делит антаЛюбите всё удалять? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 05:22 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Людм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 на несколько файлов. Возможно, Вы как раз и вышли на этот предел... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 08:22 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
tanglirЛюбите всё удалять? :) Ну нет! такого за собой не замечала. А вот оптимизацией занимаюсь частенько. Т.к. время идет - всё меняется. И я стараюсь не отставать. Поэтому код написанный мною ранее кажется мне сейчас "делитанским" - прогрессирую. ;) ========== Проект написан на FoxPro9. по поводу ограничений, то всё это "торнадо-безобразие" происходит в событии Form...CommandX.Click Cлегка оптимизировав код ошибка исчезла. И сам этот модуль меньше не стал! мало того (ради эксперимента) добавила туда с десяток строк - тоже всё работает. Солидарна с участником Dima_T - использовать макроподстановки с осторожностью (ведь воспользовавшись построчной отладкой ничего выявить не удалось) . И хорошо что выскочила ошибка программы, а еслибы этот глюк приводил к логической ошибке и получали бы мы недостоверные отчеты! типа 2+2=5 и т.д. а все .prg файлы я тоже проверю они у меня тоже не маленькие. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 11:05 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
ЛюдмilatanglirЛюбите всё удалять? :) Ну нет! такого за собой не замечала. Это он мягко намекнул на орфографические ошибки. тынц Вроде все браузеры их подчеркивают при наборе текста. Надо просто обращать на это внимание. Людмilaведь воспользовавшись построчной отладкой ничего выявить не удалось Вполне возможно вылез какой-то редкий баг в движке фокса. Если так, то только переделать код чтоб работало, MS исправлять не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 11:47 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
Dima T В хелпе же написано, что это не "редкий баг", а так задумано. Нагнали туману с макроподстановками. Было же сразу: "код стопорится на строчке Scan for &wh ...". Внимательнее надо работать с циклами. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:14 |
|
Странность &Макроподстановок
|
|||
---|---|---|---|
#18+
sg12Dima T В хелпе же написано, что это не "редкий баг", а так задумано. Нагнали туману с макроподстановками. Было же сразу: "код стопорится на строчке Scan for &wh ...". Внимательнее надо работать с циклами. Вот ты какой-то кусок хэлпа скопипастил, не глядя что он в данном случае вообще ни при чем, а теперь еще чего-то тут доказываешь. Посмотри на пример из первого поста и перечитай свой копипаст. А потом объясни каким боком он к теме топика относится. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 16:05 |
|
|
start [/forum/topic.php?fid=41&msg=38326977&tid=1582970]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
97ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 459ms |
0 / 0 |