在快速报告变量中分配值

问题描述:

嗨,我是Delphi的新成员,我正在为新雇用的员工创建报告。我正在使用Fast Report,Delphi XE2和Firebird数据库。在快速报告变量中分配值

我在为我的变量的值写入条件时遇到了问题。 如果EDU_COLL_REMARK字段值为空,我希望我的变量值处理值为'HIGH SCHOOL GRADUATE'。和COLLEGE GRADUATE,如果它有一个值。就像我做的那样。

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_COLL_REMARK。

怎么了?请帮帮我。

这是我的全部代码:

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_COLL_MARK是不是您的查询的 '参数';参数是那些以':'为前缀的项目。

不过,从查询中返回所需的值。看看Firebird文档中的case .. when。这将向您展示如何从查询中返回一个条件值。

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 ... 
+0

谢谢主席先生,但我得到了新的错误,它说:dbExpress驱动程序不支持TDBXtypes.UNKNOWN数据类型。供应商错误消息。未知的ISC错误0.这是什么意思? – ASHONG 2014-10-02 08:32:41

+0

哦!你已经改变了你的答案。我会再尝试。 – ASHONG 2014-10-02 08:34:16

+0

嗨,先生,我运行你的代码,它只显示大学毕业生。即使是空的其他员工仍然返回相同的价值。 – ASHONG 2014-10-02 08:49:49