Cold Fusion:MS Access-按年,月,日排序结果

时间:2019-02-13 19:05:18

标签: sorting ms-access coldfusion

尝试按年,月,日对事物进行分组以进行输出。

2019   二月       天

我不确定我在做什么错吗? 想知道这是否是MS Access问题?

出现太少的参数错误。

<cfquery name="nchklist" datasource="#fds#">
    SELECT year(chkdate) AS Year, month(chkdate) AS month, day(chkdate) AS day, vcheck
    FROM vchk
    where vid = '#vid#' and final = 1
    ORDER BY year, month, day
</cfquery>

<cfoutput query="nchklist" group="year">

    <cfoutput group="month">
        #monthAsString(month)#

        <cfoutput group="day">
            <a href="create_report.cfm?vcheck=#vcheck#">View</a> :  DateFormat(chkdate, 'dddd - mmmm d, yyyy')#<br>
        </cfoutput>

    </cfoutput>

</cfoutput>

1 个答案:

答案 0 :(得分:2)

更新

使用Access已经有好几年了,所以我的知识有点模糊,但是我开始记住它在ORDER BY子句中有局限性。与真正的DBMS不同,它不够智能,无法按别名列进行排序。我不知道这在最新版本中是否已更改,但是...就像我之前提到的,您应该尝试按原始表达式排序-而不是别名:

ORDER BY year(chkdate), month(chkdate), day(chkdate)

顺便说一句,CF不是一个很棒的sql调试工具。它通常通过JDBC驱动程序与数据库间接通信。与使用标准数据库工具相比,该过程返回的错误消息通常比您收到的错误消息多得多。每当遇到这样的神秘错误时,最好直接在数据库中运行sql查询,并根据需要对参数进行硬编码。这样做可能会给您带来一些不太明确的错误消息,或者至少表明ORDER BY子句是问题所在。


mentioned in comments一样,该错误可能表示列名称拼写错误。当保留字用作列名或别名时,也会发生这种情况。注意您的查询使用名为YearMonthDay的函数吗?这些是reserved words in Access。这可能是错误的原因。尝试将列别名更改为非保留字,例如TheYearTheMonthTheDay

假设MS Access支持按列别名排序,请尝试以下查询:

 SELECT year(chkdate) AS TheYear
        , month(chkdate) AS TheMonth
        , day(chkdate) AS TheDay
        , vcheck
 FROM   vchk
 WHERE  vid = <cfqueryparam value="#vid#" cfsqltype="cf_sql_varchar"> 
 AND    final = 1
 ORDER BY TheYear, TheMonth, TheDay

注意:即使使用MS Access,查询也应始终在所有输入参数上使用cfqueryparam。