Переменная как строка

отредактировано October 2004 Раздел: FastReport 3.0

В отчет передаю переменную вот так

S := Q.SelectSQL.Text;
AddReportVar('FSqlText', '''' + s + '''');


на диалаговую форму кнопку на он клик кнопки
procedure Button1OnClick(Sender: TfrxComponent);
begin
QNotify.Sql.text := <FSqlText>;
QNotify.Open;
end;

'Ошибка в выражении ''SELECT *'#$D#$A'FROM PROC_V_NOTIFY(Null, Null, 1, 6400, 1, Null, Null)'#$D#$A#$D#$A'ORDER BY RAPPARTS'#$D#$A''': Expression expected'

выскакивает 2 ексепшника.

убираем
в обработчике кнопку

кидаем мемо в отчет
там добавляем
[<FSqlText>]

хочу вывести все что находится в переменной

тоже самое ошибки.

Комментарии

  • отредактировано 08:28
    Конечно если убрать символы

    #$D#$A

    То все начинает работать.

    Но как зато начинает вести себя фаст когда присутствуют эти символы..

    Это надо смотреть.

  • отредактировано 08:28
    Почитай еще раз про работу с переменными в programmer manual. Тебе надо юзать скриптовые переменные.
  • отредактировано 08:28
    конечно я все прочитал
    поэтому и стал писать
    AddReportVar('FSqlText', '''' + s + '''');

    ты попробуй и посмотри скока ошибок вываливается
    и как себя ведет фаст после этого
  • отредактировано 08:28
    Да я знаю, ситуация описана на стр. 36 programmer manual:

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

    Учитывая вышесказанное, в некоторых случаях удобнее передавать значения переменных через скриптовые переменные.
  • отредактировано January 2011
    Друзья, то ли лыжи не едут, то ли я... :)
    Задача: передать текст вида
    написал:
    Почтовый индекс
    Страна
    Адрес
    Телефон
    в Memo, находящийся в PageHeader'e. Набор этих строк определяется настройками для каждого конкретного случая. Вариант "1 Memo = 1 строка" не подходит (информация немного не та, что указана в примере; да и в любом случае хочется вкусить радость от передачи многострокового параметра :) ).
    Итак, что я делаю...
    1. В Delphi:
    - формирую переменную DataString (глобальная, string), добавляя к ней "#13#10" в конце по типу:
    ...
    DataString:=DataString+#13#10+IBQCSelectSELEN.AsString;
    ...
    
    - в событии OnGetValue frxReport'a пишу:
    procedure TCVForm.frxReportGetValue(const VarName: string; var Value: Variant);
    begin
    if CompareText(VarName,'Seller')=0 then
      Value:=DataString;
    end;
    
    (подсмотрено в выводе массива, стр.29 + исходник в Demos'e)
    2. В FastReport'e:
    - собственно, на PageHeader бросаю Memo с текстом:
    [Seller]
    
    Не уверен, что правильно, но у меня работает... правда, не совсем так, разумеется. Пробовал, как на стр.36 написано, что-то типа:
    frxReport.Script.Variables['Seller']:=DataString;
    
    - нихт арбайтен (уверен, что-то где-то недокрутил).
    Как заставить ФР правильно воспринимать "#13#10" и "делать мне приятно", вместо вывода "колбасы" а-ля
    написал:
    05847#13#10Украина#13#10Дремучие Устюги#13#10...
    ?
    Подскажите, плз, в каком месте я прыгаю на граблях? Серьёзно, вроде бы не дурак, но чего-то не осилю... :)
  • отредактировано January 2011
    Заработало!!! Это ж надо было просидеть полдня, потратить столько нервов, затереть до дыр 36-ю страницу... и при этом не заглянуть в дебаг?!! :)
    Для тех, кто такой же любитель граблей (если таковых нет, то пишу сам для себя - а вдруг забуду! :) ):
    Причин было 2... а может и 1. Короче говоря, пишу "рабочий" вариант:
    1. В Delphi:
    1.1
    DataString:='';
    if (IBQCSelectSELLERRU.AsString<>'') and
       (IBQCSelectSELLERRU.AsString<>' ') then
      DataString:=IBQCSelectSELLERRU.AsString;
    if (IBQCSelectSELLEREN.AsString<>'') and
       (IBQCSelectSELLEREN.AsString<>' ') then
      DataString:=DataString+'|'+IBQCSelectSELLEREN.AsString;
    ... ну и так далее ...
    DataString:=StringReplace(DataString,'|',#$D#$A,[rfReplaceAll]);
    frxReport.Script.Variables['Seller']:=''+DataString+'';
    
    Примечание: добавляю '|', т.к. считываемые из Query данные тоже содержат '|' - признак новой строки. После окончания формирования произвожу замену на "честное и благородное" "#$D#$A" (строго без всевозможных кавычек в StringReplace!!!)
    1.2 Убираем OnGetValue frxReport'a - он как папаха матросу.
    2. В FastReport'e:
    2.1 В нужном Memo прописываю:
    [SellerFR]
    
    2.2 В событии OnBeforePrint к Memo пишу:
    procedure Memo5OnBeforePrint(Sender: TfrxComponent);
    begin
      Set('SellerFR','Seller');
    end;
    
    Запускаю и балдеююю... :)

    Всем спасибо, кто не успел с ответом! :) Видать, и вправду, заработался я... (((
  • отредактировано 08:28
    Я тут поковырял немного...
    Проблема-то вообще идиотская оказывается!!! (аж стыдно)
    FR выводил "колбасой", потому что я сам... подсовывал ему эту "колбасу"! :) :) :)
    В Memo достаточно прописать:
    [Seller]
    
    без всяких BeforePrint.
    Корни проблемы - в п.1.1 предыдущего поста. Ужас! Как всё до безумия просто оказывается... :)

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

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