for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Re: ADIR, глюк с маской "?"
of63
Автор

Сообщений: 11804
Откуда: Н.Новгород
Дата: 23.05.18 18:58:57ОтветитьЦитировать
В FPD26 отладчика пошагового чтоли нет? если нет, то ставить можно ставить WAIT-ики, но я тоже не верю, что после APPEND BLANK укатель на запись "сам уходит". Надо найти причину. То что "отчет точно показывает, что уходит" - недостаточен. Надо добиться правильной работы без GO BOTTOM, или указать на неправильность фокса в этом деле. Глюк криминальный, убивающий весь фокс.
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Simple777

Сообщений: 19764
Дата: 23.05.18 19:15:46ОтветитьЦитировать
Дак не воспроизводится глюк. \m/
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
of63
Автор

Сообщений: 11804
Откуда: Н.Новгород
Дата: 23.05.18 19:21:53ОтветитьЦитировать
Почему же не воспроизводится... Вот "отчет" прозвучал, REPORT FORM - это аналог SCAN (после завершения он встает на "EOF")... хз, что может быть в коде, казалось бы безобидное... Давай минимальный код, че. Воспроизведи )
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Божья_коровка

Сообщений: 16161
Дата: 23.05.18 19:28:14ОтветитьЦитировать
of63
Почему же не воспроизводится... Вот "отчет" прозвучал, REPORT FORM - это аналог SCAN (после завершения он встает на "EOF")... хз, что может быть в коде, казалось бы безобидное... Давай минимальный код, че. Воспроизведи )
Не приставай к царю, у него уже всё в порядке


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
of63
Автор

Сообщений: 11804
Откуда: Н.Новгород
Дата: 23.05.18 19:31:16ОтветитьЦитировать
Хозяйка Медной Горы? )
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Simple777

Сообщений: 19764
Дата: 23.05.18 19:38:12ОтветитьЦитировать
Там неслабая прога ваащета по размеру. Но глюк возникал в одном месте - в небольшом фрагменте. Вероятно, такой глюк был следствием предыдущих операций, напрямую не связанных с этим куском.
Ну вот примерно так было:

  
  Select mytable1  
  Append blank  
  Replace myfield1 with mytable2.Mayfield1, myfield2 with mytable2.myfield2  
  If myrable2.myfield3=spac(20)  
     select mytable2  
     tekz=recn()  
     Do while myfield3=spac(20).and.!bof()  
        skip -1  
     Enddo  
     m.myfield3=myfield3  
     go tekz  
     select mytable1  
     replace myfield3 with m.myfield3  
    * здесь этот replace не работал, поскольку был EOF()  
  Else  
     replace myfield3 with mytable2.myfield3  
  Endi
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
of63
Автор

Сообщений: 11804
Откуда: Н.Новгород
Дата: 23.05.18 20:51:06ОтветитьЦитировать
Полноценный репо код с данными ошибкой отказался делать... ) Завтра попробую, если никто не сделает заместо ТС )
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Simple777

Сообщений: 19764
Дата: 23.05.18 21:01:08ОтветитьЦитировать
Ошибка была в этом фрагменте. Ошибка не воспроизводится. Се ля ви.
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
of63
Автор

Сообщений: 11804
Откуда: Н.Новгород
Дата: 23.05.18 21:21:41ОтветитьЦитировать
() в каком? строку то хоть назови... или отладчика нет в ФПД?...
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Simple777

Сообщений: 19764
Дата: 23.05.18 21:35:17ОтветитьЦитировать
Я же написал в комментарии - смотри зеленым цветом написано. REPLACE не отрабатывал.
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
of63
Автор

Сообщений: 11804
Откуда: Н.Новгород
Дата: 23.05.18 22:13:20ОтветитьЦитировать
Simple777
Там неслабая прога ваащета по размеру. Но глюк возникал в одном месте - в небольшом фрагменте. Вероятно, такой глюк был следствием предыдущих операций, напрямую не связанных с этим куском.
Ну вот примерно так было:

  
  Select mytable1  
  Append blank  
  Replace myfield1 with mytable2.Mayfield1, myfield2 with mytable2.myfield2  
  If myrable2.myfield3=spac(20)  
     select mytable2  
     tekz=recn()  
     Do while myfield3=spac(20).and.!bof()  
        skip -1  
     Enddo  
     m.myfield3=myfield3  
     go tekz  
     select mytable1  
     replace myfield3 with m.myfield3 && это правильная и тонкая игра на m. ))) не все понимают, Симпле понимает  
    * здесь этот replace не работал, поскольку был EOF() Причина пока не ясна  
  Else  
     replace myfield3 with mytable2.myfield3  
  Endi

вроде хороший код... Но... я хз
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
akvvohinc

Сообщений: 2791
Откуда: Москва
Дата: 24.05.18 00:51:20ОтветитьЦитировать
Simple777
replace myfield3 with m.myfield3    
 * здесь этот replace не работал, поскольку был EOF()  

В процессе отладки программы случается всякое, но это всякое - "глюки программиста", которые происходят со всеми без исключения.

Отладил прогу, убрав свои глюки (иногда неосознанно), которые ты посчитал за глюки Фокса, и все работает, не существовавший глюк Фокса перестал воспроизводиться.

Поэтому, если у тебя сейчас есть реальный код, который приводит к EOF() без причины, то покажи его.
А если сейчас такого кода нет, то ты просто исправил все свои глюки (ошибки в логике).
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Simple777

Сообщений: 19764
Дата: 24.05.18 07:07:45ОтветитьЦитировать
Еще раз проверил работу уже в "оригинальной" папке. Везде убрал (в 3 местах) команду GO BOTT. Всё работает без глюков. Однако я при всем желании не могу воспроизвести имевшую быть ситуацию. Во-первых, в исходном файле я экранировал "двойные кавычки" (смотрите в соседнем топике). Во-вторых, вносил изменения в этот программный модуль, хотя и не в этих фрагментах. Возможно, еще что-то менял.

Команду GO BOTT на всякий случай оставил в работе - ничего не портит ведь.



Исправлено: Simple777, 24.05.18 07:08
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
akvvohinc

Сообщений: 2791
Откуда: Москва
Дата: 24.05.18 07:39:57ОтветитьЦитировать
Simple777
Команду GO BOTT на всякий случай оставил в работе - ничего не портит ведь.

Если ошибка в программе осталась, но она проявляет себя лишь при определенных (редких) условиях, то я бы, не убирая GO BOTTOM, добавил бы проверку на EOF() с выводом диагностики на экран и/или в файл - интересно же понять причину "глюка"! (во всяком случае это интереснее, чем при любых непонятках мастерить костыли)
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Simple777

Сообщений: 19764
Дата: 24.05.18 08:48:09ОтветитьЦитировать
Разумно, конечно. Но это была разовая обработка текстового файла. Теоретически в будущем может появиться необходимость обработать такой файл еще для кого-нибудь. Пожалуй, добавлю SUSPENDED по EOF() [sm128]
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
andrewk

Сообщений: 82
Дата: 27.05.18 19:52:05ОтветитьЦитировать
Igor Korolyov
Когда ты используешь VAL то из разбираемой строки никаких форматов не берётся - берётся, видимо, из SET DECIMAL.
В связи с этим же имеет смысл такая запись: select 000.0000+val(something) as nn from ...

Simple777
Иногда, кстати, бывает необходимо выполнить команду go recno()
Да, когда таблица открыта в нескольких областях, где-то идёт запись (действие), в результате которой могут поменяться данные этой записи, тем более если есть relation, то по возврату в эту область go recno() или skip 0 не просто не помешает, но может спасти от непонятных результатов)) Тем более, что выполняются эти команды мгновенно.

of63
Когда нарываюсь на глюк/фичу/нюанс (нужное подчеркнуть), то провожу эксперименты, и делаю костыль согласно их результатам.
Буквально позавчера наткнулся на свой комментарий в своей же древней функции:
* str(),roun(),tran() косячат при большом кол-ве знаков после запятой с увеличением целой части, поэтому делаем 2
и подобным записям склонен доверять не вдаваясь в подробности))

Simple777
И вааще это была разовая конвертация данных. Так что было и прошло...
Да не, просто это конкретно ужасная ситуация, крах данных и прочее, причём, в совершенно обычном месте кода, потому все и возбудились. Что-то здесь не то, какое-то стечение обстоятельств.
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Igor Korolyov

Сообщений: 31942
Дата: 28.05.18 13:02:43ОтветитьЦитировать
andrewk
В связи с этим же имеет смысл такая запись: select 000.0000+val(something) as nn from ...
Не только с конкретно этим - при запросах с функциями ещё более изощрённая логика определения типа (и размерности) поля результата применяется.
В 9-ке более красиво будет CAST использовать. По крайней мере не выглядит таким уж явным костылём
andrewk
Буквально позавчера наткнулся на свой комментарий в своей же древней функции:
* str(),roun(),tran() косячат при большом кол-ве знаков после запятой с увеличением целой части, поэтому делаем 2
Некоторые функции от set decimal зависят. Плюс та же самая "проблема" отображения результата - т.е. если всегда держать в уме что помимо явных ROUND фокс ещё и пытается "покрасивее" показать результат, основываясь на практически неуправляемых "ширине и точности вещественного числа хранящегося в переменной"... Ну тогда и не будет возникать "глюков" на пустом месте.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: глюк с Value%1=0 (Double)
of63
Автор

Сообщений: 11804
Откуда: Н.Новгород
Дата: 29.05.18 16:26:35ОтветитьЦитировать
Igor Korolyov
of63
Она не обьясняет КАК ФОКС превращает строку в Double в операторе X=VAL("1.001"), и как в операторе X=1.001, и в чем разница. И как TRANSFORM интерпретирует эти два разных X

В double то они одинаково "превращаются" (хотя первое во время исполнения - из "строки" прошитой как в исходном, так и в исполняемом/объектном/откомпилированном коде, а второе - на этапе компиляции, из строки aka литерала имеющегося только в исходнике - в объектном коде уже будет НЕ 1.001 а то самое double, ПЛЮС "формат отображения").

Структура Value. Для числовых значений помимо самого "значения" в ev_real хранятся "ширина" и "число десятичных знаков" в полях ev_width и ev_length соответственно.
В фоксе не бывает вещественных числовых значений без этих самых двух "дополнений". Даже для Integer (целочисленных) значений и то фокс хранит "ширину". Так что VAL записывает и "ширину" и "точность" - но не из обработанных парсером данных, а из настроек среды. Хотя парсер - тот кто преобразуем "символы циферок" в одно общее значение - всё же влияет на этот процесс. Т.к.
? VAL("1e20")  
  ? VAL("100000000000000000000")
Выглядят таки по разному, при том что "внутри" числа хранятся одинаковые.

Вобщем, когда Нагибулина докапывается до копейки (миллиярды ее меньше беспокоят), то нельзя пользоваться нативным оператором 123.45%1 чтобы получить копейки!
  
  ? STR(100*ROUND(12300.65%1,  12), 20, 12)  && 65.000000000000  
  ? STR(100*ROUND(123000.65%1, 12), 20, 12)  && 64.999999999400  
т.е. вроде бы округлил (сумма%1) до 12 разрядов (а "точных" значащих разрядов вроде бы 14 у фокса, в Double этом), ну умножил получившееся на 100 (чтобы получить число копеек)... и опять выползли шумы в младших разрядах! Получается, что нельзя заставить фокс (его ИИ по округлению) использовать для расчетов "до копейки но не точнее", надо делать ROUND(2), если есть информация, что сумма должна быть в рублях и копейках. Думал, что получится какой-то универсальный способ счета, без указания магического числа 2 (и без 12, подобранного в частном примере)... А жаль, идея хорошая была у фокса... Не зря разрабы SET DECIMAL TO 2 приделали по умолчанию, чтобы "скрыть" эти шумы при изображении. Может автоокругление до 2 при изображении и есть их "ИИ"... Если бы они хранили дробное число в "человеческом" виде (непосредственно 10-ное изображение, т.е. с сохранением разрядности человеческого представления) было бы лучше... хз.
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
Igor Korolyov

Сообщений: 31942
Дата: 29.05.18 18:28:12ОтветитьЦитировать
Назачем для вычисления КОПЕЕК применять ROUND(,12)? Ты б ещё через десятичный логарифм посчитал
Применять оператор %1 для получения дробной части числа тоже, мягко говоря, "не очень". Лучше оставить его для ЦЕЛЫХ чисел, и даже желательно только натуральных, т.к. есть интересные особенности при работе с отрицательными числами. А то очередной шок будет после вычленения "копеек" из -12300.65

Не вижу решительно никакой проблемы или ошибки в приведенном примере. 64.9999999994 копеек это и есть 65 копеек (по бизнес-логике современных российских денежных знаков, где копейка всегда целое и "минимальное" выражение физической денежной суммы). То что кто-то решил отбросить часть знаков числа а не округлить - исключительно проблемы этого кого-то

Для работы конкретно с денежными величинами существует (в фоксе) специальный тип currency - который по сути является целочисленным - что вполне логично для денежных сумм. Хотя и не всегда удобно с ним работать, особенно учитывая что он таки 4 знака после запятой отводит под "копейки" (валюты разные есть, где-то и не на 100 частей делят основную единицу). Ну и то что всякие там тарифы/расценки/прОценты и иже с ними всё же не совсем "денежными" единицами являются, а переход от "просто числа" к "денежному числу" тоже отдельная операция со своими правилами...


------------------
WBR, Igor




Исправлено: Igor Korolyov, 29.05.18 18:30
Ratings: 0 negative/0 positive

Re: ADIR, глюк с маской "?"
of63
Автор

Сообщений: 11804
Откуда: Н.Новгород
Дата: 29.05.18 21:30:24ОтветитьЦитировать
> Не вижу решительно никакой проблемы или ошибки в приведенном примере
> Для работы конкретно с денежными величинами существует (в фоксе) специальный тип currency - который по сути является целочисленным - что вполне логично для денежных сумм

Да, знаю, но в "БД" лежат числа именно в формате N(14,2), и их преобразования NTOM не нужны, и способ хранения менять не нужно. Вызывают проблемы фоксовые "операции" (типа % или *, или вообще все) с числами, связаны с представлением числа в фоксе, понимаю это... Думаю уже, типа, сделать оператор (подпрограмму) "денежное суммирование", или "денежное умножение", но смешно же... хочется пользоваться нативными операторами фокса...
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут писать в этом форуме.

On-line: 24 of63 Igor Korolyov Taran  and Guests: 21


© 2000-2018 Fox Club 
Яндекс.Метрика