尝试按年,月,日对事物进行分组以进行输出。
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>
答案 0 :(得分:2)
更新:
使用Access已经有好几年了,所以我的知识有点模糊,但是我开始记住它在ORDER BY子句中有局限性。与真正的DBMS不同,它不够智能,无法按别名列进行排序。我不知道这在最新版本中是否已更改,但是...就像我之前提到的,您应该尝试按原始表达式排序-而不是别名:
ORDER BY year(chkdate), month(chkdate), day(chkdate)
顺便说一句,CF不是一个很棒的sql调试工具。它通常通过JDBC驱动程序与数据库间接通信。与使用标准数据库工具相比,该过程返回的错误消息通常比您收到的错误消息多得多。每当遇到这样的神秘错误时,最好直接在数据库中运行sql查询,并根据需要对参数进行硬编码。这样做可能会给您带来一些不太明确的错误消息,或者至少表明ORDER BY子句是问题所在。
与mentioned in comments一样,该错误可能表示列名称拼写错误。当保留字用作列名或别名时,也会发生这种情况。注意您的查询使用名为Year
,Month
和Day
的函数吗?这些是reserved words in Access。这可能是错误的原因。尝试将列别名更改为非保留字,例如TheYear
,TheMonth
,TheDay
。
假设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。