SUBSTR() странно отрабатывает | |
---|---|
PavlikPavlikovich Автор Сообщений: 171 Дата регистрации: 21.07.2010 |
Добрый вечер!
У меня странно отрабатывает m.stroka=SUBSTR(m.stroka,2) Фокс у меня 9 SP2 09.00.0000.5815 Но форма создавалась на ранних версиях фокса. Если это важно. Есть две формы на каждой есть textbox в LostFocus этих textbox прописана вот такая строка m.stroka=SUBSTR(m.stroka,2) Мне нужно после попадания текста в textbox со сканера штрих-кода отрезать первый символ от строки. Так вот на одной форме всё ОК, а на второй значение переменной m.stroka не изменяется после SUBSTR. Проверял даже в debugger. Не отрезан там первый символ. Но прикол в том что следующая строка кода отрабатывает верно. Как буд-то он отрезан. т.е. фокс работает с этим куском как с отрезанным, а я везде вижу что первый символ присутствует. Мистика. это баг какой-то? Подскажите пожалуйста, как мне по другому отрезать первый символ? |
Re: SUBSTR() странно отрабатывает | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Ага, называется гляжу в книгу - вижу фигу. Ты видишь не то, что хочешь видеть, какую-то другую m.stroka Цитата:Зачем? ------------------ Лень - это неосознанная мудрость. |
Re: SUBSTR() странно отрабатывает | |
---|---|
sphinx Сообщений: 31188 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Попробуй обрезку символа в метод вынести. Может и есть глюки (в которые сам не верю, про глюки фокса писали в других темах, их принимаем и обходим).
P.S. Сергей Алексеевич выше написал, что может быть не то контролируешь. А в методе (да пусть временно, оспади) - может будет понятнее поведение. ------------------ "Veni, vidi, vici!"(с) Исправлено 1 раз(а). Последнее : sphinx, 06.01.23 18:24 |
Re: SUBSTR() странно отрабатывает | |
---|---|
Евгений Банщиков Сообщений: 218 Откуда: Kurgan Дата регистрации: 09.04.2004 |
Для начала неплохо бы проверить , что за символ находится в начале m.stroka а потом уже искать баги фокса. Да и вообще обработка данных со сканера в коде LostFocus textbox не самое лучшее решение. Луше это сделать так : В методе keypress form по префиксу перехватить начало ввода от сканера ,далее в цикле do While вызывать метод inkey и считывать посимвольно данные до получения символа суффикса. Такой подход позволит отсечь ложные срабатывания , заранее определить тип скан кода и его валидность и выполнить его предварительную трансформацию ,если необходимо. |
Re: SUBSTR() странно отрабатывает | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Никто не знает, что именно вы вкладываете в слово "проверял" (просто глазами смотрели на символы строки?). Вы бы выложили два скриншота окна Debug: - перед выполнением SUBSTR() - сразу после неё. А перед этим добавьте в окно Watch LEN(m.string) ASC(m.string) Исправлено 1 раз(а). Последнее : akvvohinc, 06.01.23 20:20 |
Re: SUBSTR() странно отрабатывает | |
---|---|
PavlikPavlikovich Автор Сообщений: 171 Дата регистрации: 21.07.2010 |
Сделал. Len() c 150 изменилось 149 ASC() с 49 изменилось на 52 Я в замешательстве. Хотел заскринить. Но когда я перед SUBSTR() делаю остановку SUSP и прохожу построчно в debuger, то всё отлично. Если я делаю остановку после SUBSTR(), то наведя в debuger на m.stroka, вижу визуально глазами что не отрезано. Но код далее отрабатывает как с отрезанным. в конце делаю THISFORM.REFRESH и переменная эта m.stroka в textbox остается "неотрезанная". Самое интересное что пробуя я два штрих-кода. Если штрих-код есть в базе. т.е. программа выполняется далее без всяких остановок, то переменная визуально "не отрезается" Если его нет, то выскакивает =MESSAGEBOX() и тогда переменная отрезается как надо. т.е. при любой остановке кода она "режется". Без остановки - нет. Я наверное сдамся и верну как было. Мне этот символ нужен только для процедуры инвентаризации товара. Это редко. Будем перед этим делом префикс сканера менять. Потом в обратную. Наверное вы правы. Но этот как здесь любят называть "говнокод" я придумал 12 лет назад с опытом работы в фоксе 2 года. Переделать мне его будеть очень сложно. Т.к. я открываю фокс иногда, раз в пол года. Из-за необходимости. Может я и рассматривал этот способ. Но у меня есть textbox (окно поиска) в него руками пишем и со сканера туда залетает. Там все "суётся куда надо". Всё как-бы в одном месте. |
Re: SUBSTR() странно отрабатывает | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:В этот момент перейдите в окно Command и выдайте команду DISPLAY MEMORY LIKE stroka TO FILE stroka.txtЗатем сами внимательно изучите этот файл (или опубликуйте его здесь), обратив внимание на то, сколько переменных STROKA будет в списке и особенно на то, в каком месте вашего приложения они были определены (последнее значение в конце строки). |
Re: SUBSTR() странно отрабатывает | |
---|---|
PavlikPavlikovich Автор Сообщений: 171 Дата регистрации: 21.07.2010 |
Сделал как вы сказали. Переменная одна. 1) Всунул DISPLAY MEMORY LIKE stroka TO FILE stroka.txt прямо в код после SUBSTR()
2) Сделал остановку после SUBSTR() и вбил команду в окно Command
Только получилось наоборот. Без остановки отрезалось как надо. А при остановке не отрезалось. ( я про единичку вначале). Выше я писал наоборот. Что при остановке отрезалось хорошо, а без неё не отрезалось. Либо это вообще с этим не связано. Оставил в коде DISPLAY MEMORY LIKE stroka TO FILE stroka.txt Пощелкал. В файл всё выбрасывается верно. Код отрабатывает верно. Но textbox с этой переменной отображается с 1. Создал еще один textbox с этой переменной. Везде 1 есть. Делал Refresh формы. Но дело не в этом. Не в обновлении. Баг это походу. Исправлено 5 раз(а). Последнее : PavlikPavlikovich, 07.01.23 18:41 |
Re: SUBSTR() странно отрабатывает | |
---|---|
sphinx Сообщений: 31188 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Мы в таком случае банально делаем задержку (если вынь и положь - исследовать некогда, даже с гуру сайта). Костыль. Но работает. А оптимизацию кода никто не отменял. ------------------ "Veni, vidi, vici!"(с) |
Re: SUBSTR() странно отрабатывает | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Значит у вас, как вы написали выше, несколько форм, а переменная одна типа PUBLIC, с которой эти формы одновременно работают?
Я правильно понял? И что означают слова "textbox с этой переменной"? У вас ControlSource'ом для Textbox является эта переменная, значение которой вы изменяете программно, а сам Textbox можете править и вручную?! А про баг забудьте - даже если по вашему описанию мы не выясним, в чем ошибка, то одно то, что вы используете PUBLIC переменную говорит о том, что вы просто где-то ошиблись в логике. И можно набросать с десяток вариантов, при которых PUBLIC-переменная может измениться, когда вы вовсе этого не ожидаете. Кстати, вы легко можете в этом убедиться - замените (временно) переменную m.stroka на какую-то другую в том месте (и только там), где вы подозреваете баг. И очень вероятно, что ваш "баг" исчезнет. Исправлено 4 раз(а). Последнее : akvvohinc, 07.01.23 22:21 |
Re: SUBSTR() странно отрабатывает | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Случайно akvvohinc вместо лайка клацнул наоборот. Жаль!
|
Re: SUBSTR() странно отрабатывает | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Саша, не бери в голову - не такое переживали... |
Re: SUBSTR() странно отрабатывает | |
---|---|
sphinx Сообщений: 31188 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
+1
Я тоже, как модератор присматриваю. Кто ошибся - карму подправлю. Но в этот раз был не я. ------------------ "Veni, vidi, vici!"(с) Исправлено 1 раз(а). Последнее : sphinx, 07.01.23 23:59 |
Re: SUBSTR() странно отрабатывает | |
---|---|
PavlikPavlikovich Автор Сообщений: 171 Дата регистрации: 21.07.2010 |
Да, m.stroka стоит в ControlSource для Textbox
Я сейчас сделал следующее:
на форме в ControlSource для Textbox прописал новую переменную stroka2 в lostficus Textboxа переменную stroka заменил на stroka2 Запустил всё. и тут у меня ошибка при первом же упоминании stroka2. "Переменная stroka2 не найдена." Нажимаю игнорировать. И всё отлично отрабатывает дальше. в Textbox встаёт правильно отрезанная stroka2. Получается да, воспринимается как другая переменная что ли? Что я делаю не так? Исправлено 2 раз(а). Последнее : PavlikPavlikovich, 08.01.23 13:19 |
Re: SUBSTR() странно отрабатывает | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Я не знаю, что у вас первично - сначала что-то присваивается переменной, значение которой вы затем отображаете (и изменяете?) в Textbox, или наоборот.
1) но я бы "отключил" переменную от Textbox, раз вы правите эту переменную программно и имеете (если имеете) возможность править Textbox руками. У Textbox есть свойство Value, которое и хранит его значение, так что необходимости привязывать к Textbox переменную нет. И всегда можно (если нужно) в нужный момент переменной присваивать Textbox.value или наоборот. 2) ошибка с переменной Stroka2 происходит потому, что переменная объявлена как Local в некоторой процедуре, и, естественно, переменная "исчезает" после выхода из этой процедуры. Раз вам значение переменной нужно при работе с формой, то лучше вместо этой переменной определить свойство формы - оно будет "жить", пока жива форма, и будет видно во всех методах формы и её объектов. Но временно для проверки вы можете оставить и переменную, сделав ее Public. |
Re: SUBSTR() странно отрабатывает | |
---|---|
PavlikPavlikovich Автор Сообщений: 171 Дата регистрации: 21.07.2010 |
Вот так у меня
Это получается опять всё переписывать Я вот сидел, размышлял. Раз при SUSP или =MESSAGEBOX() у меня всё "хорошо". Думаю дай как я воткну после SUBSTR() - THISFORM.REFRESH. Пусть треханёт форму. И что вы думаете? Проканало )) Работает как надо. Оставлю пока так. В своё оправдание по поводу переменной в Textbox.ControlSource. Так было сделано до меня. Я вообще думал что это нормально и это так надо. Исправлено 1 раз(а). Последнее : PavlikPavlikovich, 08.01.23 15:25 |
Re: SUBSTR() странно отрабатывает | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Я просто хотел убедить вас, что причина не в глюке Фокса. Точную причину (а то, что это ваша ошибка, я уверен на все сто) сложно определить, не видя кода. Цитата:При таком подходе к поиску ошибок неудивительно, что время от времени будет трясти не только форму, но и всё приложение. А в остальном - ничего удивительного: При Refresh формы делается и Refresh этого Textbox'a - попробуйте сделать Refresh только ему. Если это тоже поможет (а это 100% поможет), то почти наверняка причина именно в том, что я и подозревал - после программных изменений переменной её значение перестает согласовываться со значением Textbox.Value - в переменной находится новое значение, а Textbox отображает ещё старое. Вы можете в этом убедиться, добавив команду WAIT WINDOW thisform.text1.valueсразу после команды с SUBSTR() Но когда вы заходите в дебаггер, то Фокс автоматически меняет значение переменной "взад", загоняя в неё значение text1.value. Это нормальное поведение Фокса, если переменная привязана к Textbox'у. Сначала вы увидите, что они как бы разные, но переключившись в окно приложения и вернувшись в окно Debug, вы увидите, что они равны (вряд ли такое поведение можно считать глюком). А если к этому добавить ещё и возможное влияние другой формы, использующую ту же глобальную переменную, то вы получаете готовый набор взрывчатых веществ, который может рвануть в любой момент (после любой безобидной корректировки, которая на первый взгляд не должна ни на что влиять). Исправлено 6 раз(а). Последнее : akvvohinc, 08.01.23 23:02 |
Re: SUBSTR() странно отрабатывает | |
---|---|
sphinx Сообщений: 31188 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Вряд ли все, скорее преувеличиваешь. Ну и лучше ОДИН раз переписать, чем мужественно бороться с "глюками Фокса". Они есть, но их не так много, и точно не этот случай. И да, репро-кода нет, Сергей об этом писал. ------------------ "Veni, vidi, vici!"(с) |
Re: SUBSTR() странно отрабатывает | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() кстати, вместо ASC(m.string) удобно изображать в Watch: 0h+m.string
() и почему m.string (это переменная, контролируемая ТекстБоксом ?), а не TextBox.Value ? Страшное дело - строка с таким простым именем, и PUBLIC... И две формы с таким контролом... Неимоверно! ) |
Re: SUBSTR() странно отрабатывает | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Почему "вместо"? Если ты хочешь видеть код первого символа в десятичном виде, то это ASC(). Если же всю строку и в Hex, то 0h+m.string. |
© 2000-2024 Fox Club  |