Переменные в отчет из кода
Вопрос следующий:
у меня генерится отчет в зависимости от данных, передаваемых в запрос из кода основной программы.
Насколько я понял логично сделать так:
- завести переменную в отчете
- установить её значение из кода основной программы
- в запросе (ADOQuery) добавить в часть where условие типа:
where ID = :ID
- в параметрах ADOQuery задать тип параметра ID и связать его с переменной, которую передаю из программы.
Проблема:
при параметре ID типа Guid. Дизайнер просит добавить кавычки спереди и сзади, но это немного нелогично. Параметры обычно ведь задаются без кавычек.
Или подставляется просто значение переменной при выполнении запроса?
В таком случае как мне добавить кавычки спереди и сзади? Из кода не получается, т.к. возникает ошибка "Error in expression ____здесь_сам_Guid____", причем все это даже не в завпросе, а просто при попытке отобразить значение переменной в Memo. Пытался добавлять одну, две, три одинарных кавычки - результат одинаков.
Если немного непонятно рассказал - уточню. Скажите только что именно.
у меня генерится отчет в зависимости от данных, передаваемых в запрос из кода основной программы.
Насколько я понял логично сделать так:
- завести переменную в отчете
- установить её значение из кода основной программы
- в запросе (ADOQuery) добавить в часть where условие типа:
where ID = :ID
- в параметрах ADOQuery задать тип параметра ID и связать его с переменной, которую передаю из программы.
Проблема:
при параметре ID типа Guid. Дизайнер просит добавить кавычки спереди и сзади, но это немного нелогично. Параметры обычно ведь задаются без кавычек.
Или подставляется просто значение переменной при выполнении запроса?
В таком случае как мне добавить кавычки спереди и сзади? Из кода не получается, т.к. возникает ошибка "Error in expression ____здесь_сам_Guid____", причем все это даже не в завпросе, а просто при попытке отобразить значение переменной в Memo. Пытался добавлять одну, две, три одинарных кавычки - результат одинаков.
Если немного непонятно рассказал - уточню. Скажите только что именно.
Комментарии
Можете привести кусок кода с передачей переменной?
report.SetVariable(NameOfVariable, "'" + GUID_As_String + "'");
не думаю, что можно передать сам GUID (хотя могу и ошибаться)
В отчете переменная описана в скрипте или в редакторе переменных?
Есть локальный успех (но его не хватает для решения проблемы):
при присвоении переменной с GUIDом в скрипте значений руками
Set('dID','''{A713D69C-8D5D-43E8-AD3E-01B686E70417}''');
скрипт начинает понимать параметр dID в запросе
select *
from Docs
where dID = :dID
(где параметр :dID связан с переменной dID)
НО!!!
присвоить значение переменной dID из кода программы без выдачи ошибки "External Component throw an Exception" получается только
строкой
report.SetVariable("dID", "'" + dID + "'");
В этом случае значение GUIDа хотя бы отображается в memo.
Но в запросе все равно вылетает ошибка.
При попытке поиграться с кавычками - переменная не отображается даже в Memo (вышеуказанная ошибка).
Где я наступаю на грабли?
report.SetVariable("dID", "'{" + dID + "}'");
вообще, передача строковых параметров в одинарных кавычках, это особенность FastReport Studio.
Кстати, давно собираемся довести функциональность TfrxADOQuery до оригинального, дельфийского ФастРепорта. Возможно, Ваш запрос ускорит это событие.
Да, насчёт переменной. А что получается, если в скрипте вывести диалог со значением переменной? Т.е. каков её вид?
Проблема оказалась вот в чем:
если на двух разных формах генерить свой экземпляр TfrxReportClass, то вызывая ShowReport накладок не получаем, а после вызова DesignReport при следующем вызове ShowReport проблемы могут быть самыми разнообразными
А в остальном изначальная идея с параметром оказалась верна.
Фигурные скобки для GUID добавлять не обязательно. MS SQL понимает и так и так.
Спасибо еще раз.