【问题标题】:Crystal Reports 2008 Command text with parametersCrystal Reports 2008 带参数的命令文本
【发布时间】:2011-12-23 03:16:22
【问题描述】:

我有一个可以从 SQL Developer 正确运行的查询,但在尝试将其用作带有 Crystal Reports 2008 中参数的命令文本查询时会出现问题。

查询(硬编码日期;作为 Oracle 查询和 CR 2008 命令文本正确运行)

SELECT *
FROM   (SELECT PERSON.DISPLAYNAME AS NAME
               , LABOR.LA20       AS LABORRECEMPLOYEENUM
               , LABOR.LABORCODE  AS PERSONLABORCODE
        FROM   LABOR
               LEFT OUTER JOIN PERSON
                 ON ( LABOR.LABORCODE = PERSON.PERSONID )
        WHERE  LABOR.LA20 IS NOT NULL
               AND LABOR.ACTIVE = 1
               AND PERSON.DISPLAYNAME IS NOT NULL
               AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%kimball%'
               AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%electrico%'
               AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%misc labor cost adj%'
               AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%brossoit'
               AND LOWER(PERSON.DISPLAYNAME) NOT LIKE '%brossiot')PERSONINFO
       LEFT OUTER JOIN (SELECT *
                        FROM   LABTRANS
                        WHERE  LABTRANS.STARTDATE BETWEEN to_date('03/01/2011', 'mm/dd/yyyy') AND to_date('04/01/2011', 'mm/dd/yyyy')) REDUCEDLABORRANGE
         ON ( PERSONINFO.PERSONLABORCODE = REDUCEDLABORRANGE.LABORCODE )
WHERE  REDUCEDLABORRANGE.LABORCODE IS NULL; 

我想做的事

替换硬编码值:

WHERE  LABTRANS.STARTDATE BETWEEN to_date('03/01/2011', 'mm/dd/yyyy') AND to_date('04/01/2011', 'mm/dd/yyyy')

在命令文本中使用 Crystal Reports 参数。

我尝试过的(和错误)

WHERE  LABTRANS.STARTDATE BETWEEN to_date({?BeginDate}, 'mm/dd/yyyy') AND to_date({?EndDate}, 'mm/dd/yyyy')

产生错误:在需要数字的地方发现非数字字符 [数据库供应商代码:1858]

WHERE  LABTRANS.STARTDATE BETWEEN to_date('{?BeginDate}', 'mm/dd/yyyy') AND to_date('{?EndDate}', 'mm/dd/yyyy')

产生错误:缺少右括号 [数据库供应商代码 907]

解决方案的潜在关键

  • 我无法弄清楚 Crystal 实际添加到参数值中的是什么,或者它们是如何传递给查询的。

【问题讨论】:

    标签: oracle crystal-reports crystal-reports-2008


    【解决方案1】:

    当然,在我发帖后不久,我就找到了答案。

    我意识到,我不相信 Crystal 会提前将日期设置为正确的格式(通常,不相信 Crystal Reports 是正确的选择)。

    以下工作:

    WHERE  LABTRANS.STARTDATE BETWEEN {?BeginDate} AND {?EndDate}
    

    不需要额外格式化日期,因为它们已经是从 Crystal 到 Oracle 的正确格式。

    【讨论】:

    • 我在 Crystal Reports 2011 中遇到了同样的问题。我有一个不同的日期格式或过程,几乎所有与 Oracle 交互的工具都必须运行它。 Aqua Data Studio 我可以使用 '31-Jul-11' 作为日期格式,这不适用于 Crystal。水晶你让参数像上面一样。在使用 ODP.Net 的 .Net 中,我几乎总是必须使用 to_date 方法。
    • 我在这里遇到了类似的问题stackoverflow.com/questions/11968009/…
    猜你喜欢
    • 2011-04-25
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多