【问题标题】:Assigning of value in fast report variable在快速报告变量中赋值
【发布时间】:2017-10-10 17:38:38
【问题描述】:

您好,我是 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();

【问题讨论】:

    标签: delphi delphi-xe2 fastreport


    【解决方案1】:

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

    【讨论】:

    • 谢谢您,先生,但我收到了新的错误消息:Dbexpress 驱动程序不支持 TDBXtypes.UNKNOWN 数据类型。供应商错误消息。未知 ISC 错误 0。这是什么意思?
    • 哦!你改变了你的答案。我会再试一次。
    • 您好,先生,我运行您的代码,它只显示大学毕业生。即使是 null 的其他员工,仍然返回相同的值。
    • 没有一些示例数据,我无法轻松地为您提供任何进一步的帮助
    • 为了便于查看发生了什么,您可以尝试返回变量 EDU_COLL_MARK,然后返回 CASE 语句的结果。这可能会告诉你你得到了什么,这样你就可以找出问题所在。
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多