Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2018, 15:02   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию [Delphi] - Откуда изменение переменной

Доброе время суток форумчане
Столкнулся вот с такой фиговиной: (см.рис) есть переменная «LNameFile», которая при дебаге на 238 строке еще равна «*.fbk», на 239 строке переменная приравнивается к «'PLAN 2018.08.20 18-12-19.fbk'»
ОТКУДА???

Если рис. слишком мелкий то сюда

Заранее спасибо за ответ.
Изображения
Тип файла: jpg Untitled.jpg (102.6 Кб, 132 просмотров)

Последний раз редактировалось KBO; 21.09.2018 в 15:05.
KBO вне форума Ответить с цитированием
Старый 21.09.2018, 15:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Внимание! Точного ответа я не знаю, дальше будут мои догадки, вымыслы и фантазии!

Рискну предположить, что либо таймер, либо поток виноваты.
А расскажите, зачем использовать ГЛОБАЛЬНУЮ переменную?
Вы переменную опишите там, где её используете и используйте, вот глюков и не будет

я надеюсь, что приведённая на скриншоте конструкция не висит на таймере?
и, чисто случайно, ниже по коду нет присвоения переменной LNameFile значения найденного имения файла?!
Вы вообще в курсе, что пока у Вас выполняется обработка таймера, может этот же обработчик сработать ещё раз и Вы войдёте в процедуру таймера повторно ?
При этом глобальные переменные будут установлены на то значение, какое они имели в момент повторного срабатывания ?

Последний раз редактировалось Serge_Bliznykov; 21.09.2018 в 15:25.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2018, 15:24   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

«LNameFile» - это локальная переменная (т.е. описанная в этой процедуре)

Код:
procedure TFMain.tBackupTimer(Sender: TObject);
var
  SearchRec: TSearchRec; // информация о файле или каталоге
  l, LPathDB, LNameFile: string;
  LCountFile, LInd: integer;
  LArrayFiles: Array of String;
begin
KBO вне форума Ответить с цитированием
Старый 21.09.2018, 15:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
«LNameFile» - это локальная переменная (т.е. описанная в этой процедуре)
это уже хорошо.

прочитайте, я там свой пост дописал, пока Вы ответ писали...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2018, 15:29   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
[B][I]
Вы вообще в курсе, что пока у Вас выполняется обработка таймера, может этот же обработчик сработать ещё раз и Вы войдёте в процедуру таймера повторно ?
При этом глобальные переменные будут установлены на то значение, какое они имели в момент повторного срабатывания ?
Но я же breakpoint вроде поставил, выполнение Timer должно было остановиться
KBO вне форума Ответить с цитированием
Старый 21.09.2018, 15:32   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
Но я же breakpoint вроде поставил, выполнение Timer должно было остановиться
так. т.е. всё таки процедура на таймере висит?!

а вы поставьте в начало вашей процедуры
Код:
  tBackup.Enabled:=False;
а в конце -
Код:
  tBackup.Enabled:=True;
а потом проверяйте.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2018, 15:33   #7
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

офигеть,

верно после breakpoint, у меня происходит форммирование массива из списка файлов

Код:
  begin//all files in array
          LInd := 0;
          ChDir(ibqEmpty.FieldByName('FIELD1').AsString+'\');
          if FindFirst(LNameFile, faArchive, SearchRec) = 0 then
          repeat
            if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
            begin
              SetLength(LArrayFiles, Length(LArrayFiles) + 1);
              LArrayFiles[LInd - 1] := SearchRec.Name;
              inc(LInd);
            end;
          until FindNext(SearchRec) <> 0;
        end;
но я еще раз скажу, я ж до этого поставил после breakpoint.

Должен был быть "СТОП"
KBO вне форума Ответить с цитированием
Старый 21.09.2018, 15:35   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А расскажите, зачем использовать ГЛОБАЛЬНУЮ переменную?
Она не глобальная, она в заголовке процедуры описана

Попробовал найти баг по фотографии, но ничего путного не нашёл, видимо, телепатия сегодня отдыхает

Поэтому предварительно согласен с Сергеем: где-то образуется пересечение имён переменных
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 21.09.2018, 15:36   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
  tBackup.Enabled:=False;
а в конце -
Код:
  tBackup.Enabled:=True;
а потом проверяйте.
Да, спасибо - это помогло
KBO вне форума Ответить с цитированием
Старый 21.09.2018, 15:39   #10
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

А что, таймер, по breakpoint, нельзя остановить???
KBO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: изменение типа переменной со string на PAnsiChar Xaker_Two Помощь студентам 1 03.02.2013 01:18
Отследить изменение переменной _SERGEYX_ Общие вопросы Delphi 10 02.03.2011 18:59
Изменение переменной Алексей_xXx Общие вопросы C/C++ 1 11.12.2009 10:49
Изменение переменной Ant1Player PHP 8 30.03.2009 22:07
Изменение переменной yura-cat Помощь студентам 7 20.09.2008 17:42