Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! мне нужно подготовить таблицу для отчета в котором 3 колонки, пытаюсь сделать в поле print_pos числовой признак колонки.. а фокс изменяет только первую запись, и все.. помогите, плиз, в чем проблема?? я пробовал несколько вариантов, ничего не получается (они в коментах) select e1.artikul, ; e1.name_nom, ; e1.tov_color, ; e1.tov_size, ; 0000 as print_pos, ; recno() as rec_no ; from aden_end1 e1 ; into dbf c:\aden_end2 select aden_end2 go top pos = 0 scan DO CASE CASE rec_no = pos + 1 repl print_pos with 1 for rec_no = pos + 1 CASE rec_no = pos + 2 repl print_pos with 2 for rec_no = pos + 2 CASE rec_no = pos + 3 repl print_pos with 3 for rec_no = pos + 3 ENDCASE *!* DO CASE *!* CASE rec_no = pos + 1 *!* update aden_end2 set print_pos = 1 where rec_no = pos + 1 *!* CASE rec_no = pos + 2 *!* update aden_end2 set print_pos = 2 where rec_no = pos + 2 *!* CASE rec_no = pos + 3 *!* update aden_end2 set print_pos = 3 where rec_no = pos + 3 *!* ENDCASE *!* if rec_no = pos + 3 *!* update aden_end2 set print_pos = 1 where rec_no = pos + 1 *!* endif *!* if rec_no = pos + 2 *!* update aden_end2 set print_pos = 2 where rec_no = pos + 1 *!* endif *!* if rec_no = pos + 3 *!* update aden_end2 set print_pos = 3 where rec_no = pos + 1 *!* endif pos = pos + 3 endscan табличку с образцами данных прилагаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 13:16 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
А где же у тебя rec_no меняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 13:22 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
так rec_no это поле таблицы и оно меняется по-моему ( так раньше всегда работало ) просто движением по записям при сканировании ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 13:28 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 13:28 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
а у меня то что не так? вроде все нормально.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 13:31 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
alex_dchЗдравствуйте! мне нужно подготовить таблицу для отчета в котором 3 колонки, пытаюсь сделать в поле print_pos числовой признак колонки.. а фокс изменяет только первую запись, и все.. помогите, плиз, в чем проблема?? я пробовал несколько вариантов, ничего не получается (они в коментах) select e1.artikul, ; e1.name_nom, ; e1.tov_color, ; e1.tov_size, ; 0000 as print_pos, ; recno() as rec_no ; from aden_end1 e1 ; into dbf c:\aden_end2 select aden_end2 go top pos = 0 scan DO CASE CASE rec_no = pos + 1 repl print_pos with 1 for rec_no = pos + 1 CASE rec_no = pos + 2 repl print_pos with 2 for rec_no = pos + 2 CASE rec_no = pos + 3 repl print_pos with 3 for rec_no = pos + 3 ENDCASE *!* DO CASE *!* CASE rec_no = pos + 1 *!* update aden_end2 set print_pos = 1 where rec_no = pos + 1 *!* CASE rec_no = pos + 2 *!* update aden_end2 set print_pos = 2 where rec_no = pos + 2 *!* CASE rec_no = pos + 3 *!* update aden_end2 set print_pos = 3 where rec_no = pos + 3 *!* ENDCASE *!* if rec_no = pos + 3 *!* update aden_end2 set print_pos = 1 where rec_no = pos + 1 *!* endif *!* if rec_no = pos + 2 *!* update aden_end2 set print_pos = 2 where rec_no = pos + 1 *!* endif *!* if rec_no = pos + 3 *!* update aden_end2 set print_pos = 3 where rec_no = pos + 1 *!* endif pos = pos + 3 endscan табличку с образцами данных прилагаю Ну посмотри же внимательней на фрагмент! Ты делаешь SCAN, а внутри него делаешь replace... for... . Именно эта команда (первая из трех в Do Case) тебя и выбрасывает на конец файла. Соответственно и SCAN заканчивается... В этом случае надо сделать примерно так: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 13:32 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
select aden_end2 go top pos = 0 scan repl print_pos with 1 for rec_no = pos + 1 repl print_pos with 2 for rec_no = pos + 2 repl print_pos with 3 for rec_no = pos + 3 pos = pos + 3 endscan case можно не применять, условие for его фактически дублирует. теперь делает первые 3 записи. видимо не понимает что pos + 3 в упор не пойму в чем наврал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 14:53 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
Ты попутал ф-цию RECNO() с переменной rec_no. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 14:59 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
Напиши, что ты хочешь получить в результате. Т.е. какие значения должно принять поле print_pos. Если даже убрать условие FOR в команде REPLACE (которое собственно и завершает твой цикл), то в твоем CASE всегда будет выполняться только первое условие. Если тебе надо просто проставить 1,2,3 в цикле, то это можно решить проще через одну команду REPLACE Код: plaintext 1. Использовать функцию Recno() непосредственно в команде Select-SQL надо с предельной осторожностью. Ясно понимая что именно будет возвращать такая функция в твоем запросе. В общем случае, лучше этого не делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 14:59 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
теперь делает первые 3 записи. видимо не понимает что pos + 3 в упор не пойму в чем наврал это не так уж и сложно как вы описываете просто не нужно удалять ганды через задний проход прочтите ответы приведеные выше по поводу вашего вопроса последенего даю наводку куда переместиться указатель записи после : repl print_pos with 1 for rec_no = pos + 1 и совет перестанте паниковать если моно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:13 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
alex_dch select aden_end2 go top pos = 0 scan repl print_pos with 1 for rec_no = pos + 1 repl print_pos with 2 for rec_no = pos + 2 repl print_pos with 3 for rec_no = pos + 3 pos = pos + 3 endscan case можно не применять, условие for его фактически дублирует. теперь делает первые 3 записи. видимо не понимает что pos + 3 в упор не пойму в чем наврал Объясняю (если не поймете - перечитайте еще несколько раз): Условие "for..." в различных командах аналогично сканированию базы данных от первой записи до последней и проверке условия . Поэтому, после выполнения команды "repl print_pos with 3 for rec_no = pos + 3" указатель окажется на последней записи таблицы . Поэтому цикл SCAN прекратится . Как результат: изменятся значения только у трех записей. А чем Вас мое решение не устраивает? Или решение ВладимираМ? Или Hel!Riser'a? Или Вы их просто не понимаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:14 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
вообще делает похоже, но не совсем. мне надо чтоб записи нумеровались Recno() print_pos 1 1 2 2 3 3 4 1 5 2 6 3 7 1 8 2 а Recno() я и не использую, для этого и завел столбец специальный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:15 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
чем вам ответ hel!riser не понравился вчитывайтесь в ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:17 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
мне надо чтоб записи нумеровались select e1.artikul, ; e1.name_nom, ; e1.tov_color, ; e1.tov_size, ; 0000 as print_pos, ; recno()%3 as rec_no ; from aden_end1 e1 ; into dbf c:\aden_end2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:20 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
select artikul,name_nom,e1.tov_color,e1.tov_size,0000 as print_pos, ; ; recno() as rec_no ; recno()%3 as nn ; ; from aden_end1 e1 ; into dbf c:\aden_end2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:22 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
2 Станислав C. да, ваш вариант работает, я просто скопировал как-то не все.. а то что предлагают другие, работает но немного не так 3 2 1 2 1 это от Владимира М 1 2 3 2 1 это от ХелРейзера спасибо всем!! главное я разобрался почему меня выкидывало из скана а то что Leaf пишет с % я пока не смотрел, не знакомая штука есть что почитать по поводу %?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:36 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
mod(a,b) =a%b - остаток от деления а на b попробуйте понравиться в моем последнем варианте не нужно не цикла не команды репласе найдите тока где запятую пропустил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:39 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
ответы hel!riser и владимира не дают результата потому что порядок следования записей после выборки изменился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:45 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
и работать надо уже не с функцией recno() а вашим полем таблицы rec_no ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:47 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
select artikul,name_nom,e1.tov_color,e1.tov_size,0000 as print_pos, ; recno() as rec_no ; ,iif(recno()%3=0,3,recno()%3+1) as nn ; from aden_end1 e1 ; into dbf c:\aden_end2 это недостающая запятая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:50 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
1. select aden_end2 scan repl print_pos with iif(rec_no%3=0,3,rec_no%3+1) endscan 2. select aden_end2 REPLACE ALL print_pos WITH iif(rec_no%3=0,3,rec_no%3+1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 15:59 |
|
||
|
не получается изменить поле в конструкции SCAN
|
|||
|---|---|---|---|
|
#18+
наиболее короткое решение! select artikul,name_nom,e1.tov_color,e1.tov_size,0000 as print_pos, ; recno() as rec_no ; ,iif(recno()%3=0,3, recno()%3 ) as nn ; from aden_end1 e1 ; into dbf c:\aden_end2 только не надо recno()%3 + 1 ДА, действительно ГЛАНДЫ :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2005, 16:09 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32914544&tid=1594863]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 261ms |
| total: | 419ms |

| 0 / 0 |
