Delphi 快速报告变量中的赋值
嗨,我是德尔福的新手,我正在为新雇用的员工创建报告。我正在使用Fast Report、Delphi XE2和Firebird数据库 我在为变量的值编写条件时遇到问题。 我希望变量的值被处理为一个值,例如“如果EDU_COLL_备注字段值为空,则高中毕业”。和Delphi 快速报告变量中的赋值,delphi,delphi-xe2,fastreport,Delphi,Delphi Xe2,Fastreport,嗨,我是德尔福的新手,我正在为新雇用的员工创建报告。我正在使用Fast Report、Delphi XE2和Firebird数据库 我在为变量的值编写条件时遇到问题。 我希望变量的值被处理为一个值,例如“如果EDU_COLL_备注字段值为空,则高中毕业”。和大学毕业生,如果它有价值的话。。就像我一样 if dmapp.sqtrans.parambyname('EDU_COLL_REMARK').IsNull then dmapp.frxReport1.Variables['edu
大学毕业生
,如果它有价值的话。。就像我一样
if dmapp.sqtrans.parambyname('EDU_COLL_REMARK').IsNull then
dmapp.frxReport1.Variables['edu'] := QuotedStr('HIGH SCHOOL GRADUATE');
else
dmapp.frxReport1.Variables['edu'] := QuotedStr('COLLEGE GRADUATE');
但它不起作用。它返回一个
错误SQTrans:未找到参数EDU\u COLL\u备注
怎么了?请帮帮我
这是我的全部代码:
dmApp.sqTRANS.SQL.Clear;
dmApp.sqtrans.SQL.Add('Select s.SKILLS_NAME, c.CUST_NAME, e.FULL_NAME, e.REFER_1NAME, e.HIRE_DATE, e.AGE, e.HEIGHT_FEET, e.HEIGHT_INCH, e.EDU_COLL_REMARK, e.TEST_1TITLE, e.SEC_EXPERIENCE_YEARS, e.CELL_NO, e.ADDRESS_LINE FROM EMPLOYEE e INNER JOIN CUSTOMER c ' +
'on e.CUST_NO=c.CUST_NO ' +
'FULL JOIN SKILLSTABLE s on e.SKILLS_NO=s.SKILLS_NO ' +
'WHERE EXTRACT(MONTH FROM HIRE_DATE) = :M_HIRE_DATE ' +
'AND EXTRACT(YEAR FROM HIRE_DATE) = :Y_HIRE_DATE ' +
'order by HIRE_DATE DESC');
dmApp.sqTRANS.ParamByName('M_HIRE_DATE').AsString := FormatDateTime('MM', dpdate.Date);
dmApp.sqTRANS.ParamByName('Y_HIRE_DATE').AsString := FormatDateTime('yyyy', dpdate.Date);
if dmapp.sqtrans.parambyname('EDU_COLL_REMARK').IsNull then
dmapp.frxReport1.Variables['edu'] := QuotedStr('HIGH SCHOOL GRADUATE');
else
dmapp.frxReport1.Variables['edu'] := QuotedStr('COLLEGE GRADUATE');
dmApp.sqTRANS.ExecSQL();
dmApp.frxDBDataset1.DataSet := dmApp.sqTRANS;
dmApp.frxReport1.LoadFromFile('c:\vitech3\NewlyHired.fr3');
dmapp.frxReport1.variables['COMPANYNAME'] := QuotedStr(Globals.GetCompanyName);
dmapp.frxReport1.variables['COMPANYADD'] := QuotedStr(Globals.GetCompanyAddr + ' Cubao, Quezon City');
dmapp.frxReport1.variables['CAPTION'] := QuotedStr('Newly Hired Report for ' + FormatDateTime('MMMM', dpdate.date) + ' ' + FormatDateTime('yyyy', dpdate.date));
dmApp.frxReport1.ShowReport();
EDU\u COLL\u MARK
不是查询的“参数”;参数是以“:”为前缀的项目
但是,从查询中返回所需的值。请看一看案例。。当Firebird文档中出现
时。这将向您展示如何从查询中返回条件值
SELECT
CASE EDU_COLL_MARK
WHEN NULL THEN 'HIGH SCHOOL GRADUATE'
ELSE 'COLLEGE GRADUATE'
END AS EDU
FROM ...
--------------或许
SELECT
CASE COALESCE(EDU_COLL_MARK, '')
WHEN '' THEN 'HIGH SCHOOL GRADUATE'
ELSE 'COLLEGE GRADUATE'
END AS EDU
FROM ...
谢谢,先生,但是我发现了一个新的错误,它说:Dbexpress驱动程序不支持TDBXtypes.UNKNOWN数据类型。供应商错误消息。未知ISC错误0。这是什么意思?哦!你已经改变了答案。我会再试一次。嗨,先生,我运行了你的代码,它只显示大学毕业生。即使是另一个为null的雇员,也会返回相同的值。如果没有一些示例数据,我无法再为您提供任何帮助。只是为了更容易地查看发生了什么,您可以尝试返回变量EDU_COLL_MARK,然后返回CASE语句的结果。这可能会告诉你你得到了什么,这样你就可以找出问题所在。