Проблема при изменении значения переменной из списка переменных отчёта(замена 1 символа - нижний/вер

отредактировано July 2017 Раздел: FastReport 4.0
Добрый день!

В поле компонента EDIT введён текст, при замене символа в верхнем/нижнем регистре на соответствующий символ в нижнем/верхнем регистре ( 'A' на 'a' например)
Get не отрабатывает ( или Set скорее даже),значение переменной из списка переменных отчёта остаётся прежним.
... В чём загостка? При добавлении/удалении символов,замене символа не на парный по upper/lower
проблема не возникает, ниже - урезанный пример бедствия :

procedure Button2OnClick(Sender: TfrxComponent);
begin
Set('acc_iban',CHR(39)+Edit1.TEXT+CHR(39));--присваиваем значение
label5.caption := Get('acc_iban'); -- возникает проблема
label4.caption := Edit1.TEXT; --отрабатывает без проблем

--здесь тоже плохо, sql из IBANChecker1 отрабатывает с предыдущим значением
IBANChecker1.Open;
IBANChecker1.First;
// while not IBANChecker1.Eof do
begin
label2.caption := IBANChecker1.Fields[0].AsString;
label3.caption := IBANChecker1.Fields[1].AsString;
// IBANChecker1.Next;
end;
IBANChecker1.Close;
end;


procedure Edit1OnChange(Sender: TfrxComponent);
begin
Set('acc_iban',CHR(39)+Edit1.TEXT+CHR(39));
label5.caption := Get('acc_iban'); -- возникает проблема
label4.caption := Edit1.TEXT; --отрабатывает без проблем

end;


дополнено :
аналогичная проблема если задавать значение переменной таким способом
Report.Variables.Variables :=CHR(39)+Edit1.TEXT+CHR(39);

Комментарии

  • gpigpi
    отредактировано 07:56
    Попробуйте
    Report.Variables.Variables := CHR(39) + CHR(39) + Edit1.TEXT + CHR(39) + CHR(39);
  • отредактировано 07:56
    gpi написал: »
    Попробуйте
    Report.Variables.Variables := CHR(39) + CHR(39) + Edit1.TEXT + CHR(39) + CHR(39);

    Пробовал уже, тогда уже вот так :
    Report.Variables.Variables :=CHR(39)+Edit1.TEXT+CHR(39);

    Та же проблема. Знающие люди мне уже сказали в чём скорее всего проблема :
    "В Delphi при сравнении строк и текста используют AnsiCompareText или ей подобную, а она не чувствительна к регистру"

    Похоже, в FR в описании класса variables (или как он там , исходников я не видел) где-то эта функция в методе Set зашита.

    И вот как это обойти?
  • gpigpi
    отредактировано 07:56
    Проверил, такой скрипт работает
    procedure Button1OnClick(Sender: TfrxComponent);
    begin
      Report.Variables.Variables['acc_iban'] := CHR(39) + Edit1.TEXT + CHR(39);     
      label1.caption := Get('acc_iban');      
    end;
    
    Цитата из руководства программиста
    написал:
    Следует отметить важный момент. При обращении к переменной, определенной в списке переменных, происходит вычисление ее значения, если тип переменной – строковый. Это означает, что переменная со значением Table1."Field1" вернет на самом деле значение поля БД, а не строку 'Table1."Field1"'. При присвоении строковых значений таким переменным следует быть осторожным. Например, при выполнении отчета следующий код вызовет ошибку "переменная test не определена":

    frxReport1.Variables := 'test';

    поскольку FastReport при обращении к переменной My Variable будет пытаться вычислить ее значение. Правильно передавать строковые переменные надо так:

    frxReport1.Variables := '''' + 'test' + '''';

    В этом случае значение переменной – строка 'test' – будет выведено без ошибок. Однако учтите два важных ограничения при использовании такого метода:

    - в строке не должно быть одинарных кавычек. Все одинарные кавычки надо продублировать;
    - в строке не должно быть символов #13#10.

    Учитывая вышесказанное, в некоторых случаях удобнее передавать значения переменных через скриптовые переменные
  • отредактировано 07:56
    gpi написал: »
    Проверил, такой скрипт работает
    procedure Button1OnClick(Sender: TfrxComponent);
    begin
      Report.Variables.Variables['acc_iban'] := CHR(39) + Edit1.TEXT + CHR(39);     
      label1.caption := Get('acc_iban');      
    end;
    
    Цитата из руководства программиста

    Если не сложно, введите в поле EDIT значение , скажем ABC. Нажмите на кнопку, убедитесь, что CAPTION у LABEL теперь ABC.
    Теперь замените 1 символ в EDIT, скажем вместо A - a , получаем в поле EDIT - aBC. Снова жмём на кнопку - видим CAPTION у LABEL ABC, но не aBC.
    По крайней мере у меня так.
    Проблема не в CHR(39) , при некорректном количестве кавычек мы увидим ошибку.
  • gpigpi
    отредактировано 07:56
    Попробуйте использовать скриптовую переменную
    procedure Button1OnClick(Sender: TfrxComponent);
    var s: string;  
    begin
      //Report.Variables.Variables['acc_iban'] := CHR(39) + Edit1.TEXT + CHR(39);     
      s := Edit1.TEXT;                  
      label1.caption := s;//Get('acc_iban');
    end;
    
  • отредактировано July 2017
    gpi написал: »
    Попробуйте использовать скриптовую переменную
    procedure Button1OnClick(Sender: TfrxComponent);
    var s: string;  
    begin
      //Report.Variables.Variables['acc_iban'] := CHR(39) + Edit1.TEXT + CHR(39);     
      s := Edit1.TEXT;                  
      label1.caption := s;//Get('acc_iban');
    end;
    
    В том то и беда, что мне нужно запустить переменную в SQL. У меня написан пакет, в котором 2 функции, проверка счёта на корректность структуры. Регистр имеет критическое значение.
    В label.caption уже выводиться должен результат работы функций.
  • gpigpi
    отредактировано 07:56
    Report.Variables.Variables['acc_iban'] := CHR(39) + '' + CHR(39);
    Report.Variables.Variables['acc_iban'] := CHR(39) + Edit1.TEXT + CHR(39);
    
  • отредактировано 07:56
    gpi написал: »
    Report.Variables.Variables['acc_iban'] := CHR(39) + '' + CHR(39);
    Report.Variables.Variables['acc_iban'] := CHR(39) + Edit1.TEXT + CHR(39);
    
    Пробовал я так уже, не помогает.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.