Ошибка в выражении при попытке считать значение пе

отредактировано 03:12 Раздел: FastReport 3.0
При переходе с версии 2.55 столкнулся с следующей проблемой. При попытке считать значение переменной, выскакивает ошибка в выражении???

Раньше в версии 2.55 использовал такой код в DialogPage:

if [Выбрать документы] <>'Все'
Then QTovar.SQL.Add('Where Types in ('''+[Выбрать документы]+''')')
Else QTovar.SQL.Add('Where Types is not null');

значение переменной [Выбрать документы] - 'возврат','расход'
пробывал закрыть их в скобки ''возврат','расход'' тоже не проходит, вылезает ошибка.

обращаться к переменной пытался и так:

if VarToStr([Выбрать документы]) <>'Все'
....

и все равно выдает ошибку.
подскажите что делаю не так?
Спасибо.

Комментарии

  • gpigpi
    отредактировано 03:12
    Попробуйте так:
    if <Выбрать документы> <>'Все'
    Then QTovar.SQL.Add('Where Types in ('''+<Выбрать документы>+''')')
    Else QTovar.SQL.Add('Where Types is not null');
    
  • отредактировано 03:12
    Ошибка вылезает на моменте обращения к переменной
    пробывал и так:

    if <Выбрать документы> <>'Все'
    Then ;

    и вот так:

    s:= VarToStr(<Выбрать документы>);

    if s <>'Все'
    Then ;

    т.е. ошибка вылезает не на моменте заполнения SQL запроса... в том то и суть.
    причем заметил что ошибка вылезает как только появляется запятая меду значениями. если пользовательзадает тип документов для выборки однозначение 'расход' или 'возврат' и т.д. то все велликолепно работает.
  • отредактировано 03:12
    покопавшись в исходниках нашел почему ошибка возникает. А вот как ее решить пока не знаю...

    в процедуре TfrxExpressionCache.Calc(const Expression: String; var ErrorMsg: String; AScript: TfsScript): Variant;

    ....

    if CompareText(FScriptLanguage, 'PascalScript') = 0 then
    FScript.Lines.Text := 'function fr3f' + IntToStr(i) + ': Variant; begin ' +
    'Result := ' + Expression + ' end; begin end.'

    ....

    естественно когда переменная имеет значение ''возврат'' она передается в скрипт как 'возврат' и ошибки не возникает.

    У меня передается значение ''расход','возврат'' при передачи в скрипт для компиляции получается текст типа 'function fr3f1: Variant; begin Result := 'Возврат','Расход' end; begin end.'

    что естественно вызовет ошибку.

    ВОПРС: как решить проблемку, передаю вроде правильно переменную как и описано разработчиком закрывая значения в две одиночные ковычки:
    ''расход','возврат'' как и все переменные.

    Я не могу определить заранее какие переменные какие значения будут иметь, поэтому заранее закрыть еще одни ковычки не получится. Если закрыть лишними то тоже вызовет ошибку.
  • gpigpi
    отредактировано 03:12
    Может, попробовать через скриптовую переменную
    var Выбрать_документы:string;
    ...
    Выбрать_документы:='''Возврат'',''Расход''';
    ...
    if Выбрать_документы <>'Все' then 
    ...
    
  • отредактировано 03:12
    Да спасибо. Я именно так и решил проблемку.
    Скриптовую переменную использвать необязательно. Просто я пытался закрывать в кавычки всю переменную, а про внутренние кавычки забыл совсем. Пришлось в обработчике чтения переменной добавить условия:

    ...
    if (pos(''',''',s)>0) and (pos(''''',''''',s)=0)
    Then frxReport.variables[VariableList]:=''''+ReplaceStr(s,''',''',''''',''''')+''''
    Else frxReport.variables[VariableList]:=''''+s+''''
    ....

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

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