【问题标题】:ColdFusion update to Access Database "Too Few Parameters"ColdFusion 更新到 Access 数据库“参数太少”
【发布时间】:2014-11-26 20:19:33
【问题描述】:

我在 Access 表中添加了一个名为 AssignedDate 的新字段,数据类型为日期/时间。然后我将它添加到现有的更新查询中,我收到了这个错误:

[Macromedia][SequeLink JDBC 驱动程序][ODBC 套接字][Microsoft][ODBC Microsoft Access Driver]
参数太少。预计 1。

UpdatedDate = #Now()#, AssignedDate = #Now()# 503 : WHERE RequestID = '#arguments.RequestID#'
504:</cfquery>
505:</cffunction>
SQL: UPDATE Requests_Main SET CADOperatorID = '', EngineerID = 'EAGLE', RequestStatusID = '1', AssingedDate = {ts '2014-11-26 12:50:02'}, UpdatedDate = {ts '2014-11-26 12:50:02'}, AssignedDate = {ts '2014-11-26 12:50:02'} WHERE RequestID = '13999'
数据源 XXX
VENDORERRORCODE -3010
SQLSTATE 07002

所有内容都拼写正确且数据类型匹配,但不会更新。

如果有人可以帮助解释原因,我将非常感激。

这是除了添加新字段之外没有任何更改的查询。我已经尝试在变量周围添加单引号,但它们都丢失了,但这也不起作用。

`<cffunction name="UpdateRequest_Assignments" access="public" output="false">
    <cfargument name="RequestID" type="numeric" required="true">
        <cfargument name="CADOperatorID" type="string" required="true">
        <cfargument name="EngineerID" type="string" required="true">
        <cfargument name="RequestStatusID" type="numeric" required="true">

            <cfquery datasource="#request.DSN#">
                UPDATE Requests_Main
                SET CADOperatorID = '#arguments.CADOperatorID#',
                EngineerID = '#arguments.EngineerID#',
                RequestStatusID = #arguments.RequestStatusID#,
                AssingedDate = #Now()#,
                UpdatedDate = #Now()#,
                AssignedDate = #Now()#
                WHERE RequestID = #arguments.RequestID#
            </cfquery>

【问题讨论】:

  • 拼写错误的字段名称将被解释为参数。 AssingedDateAssignedDate 之间是否存在问题?
  • @Kstomp - 下次,错误消息属于in the question,因此它们更加明显。仅供参考,错误消息已移至问题中。请删除多余的评论。
  • @HansUp - 好地方。这大概就是问题所在。顺便说一句,Kstomp 在所有可变查询参数上始终使用cfqueryparam
  • 空字符串有什么可疑之处?需要详细说明吗?
  • 如果您的意思是“ID”表示数字数据类型,而不是字符串/文本 - 也许。但是,如果是这种情况,它应该会产生不同的错误,即数据类型不匹配。

标签: ms-access coldfusion


【解决方案1】:

我认为@hansup 就在这里。您可能没有将新列命名为“asingeddate”。同时,如果您打算将其指定为日期,那么您为什么要在更新中将该列列出两次?那也会导致错误吧?

【讨论】:

  • @HansUp 得到了答案,谢谢大家对此的帮助。我现在有点傻,因为我现在可以看到我的错误在盯着我看。估计我看了有点久。再次感谢您帮助我。
【解决方案2】:

我认为问题是您在单个查询中更新同一列 2 次。检查您的更新声明,同一列“AssingedDate”被列出两次。删除它并重试。此外,我会在更新表时使用 cfqueryparam。最佳实践:)。

                <cfquery datasource="#request.DSN#">
                    UPDATE Requests_Main
                    SET   CADOperatorID = <cfqueryPARAM value = "#arguments.CADOperatorID#" CFSQLType = 'CF_SQL_VARCHAR'>  ,
                          EngineerID = <cfqueryPARAM value = "#arguments.EngineerID#" CFSQLType = 'CF_SQL_VARCHAR'>,
                          RequestStatusID = <cfqueryPARAM value = "#arguments.RequestStatusID#" CFSQLType = 'CF_SQL_NUMERIC'> ,
                          AssingedDate = <cfqueryPARAM value = "#Now()#" CFSQLType = 'CF_SQL_TIMESTAMP'>,
                          UpdatedDate = <cfqueryPARAM value = "#Now()#" CFSQLType = 'CF_SQL_TIMESTAMP'>,
                    WHERE RequestID = <cfqueryPARAM value = "#arguments.RequestStatusID#" CFSQLType = 'CF_SQL_NUMERIC'>
                </cfquery>

【讨论】:

  • 您正在更新同一列 2 次​​i> 实际上,它们不是。由于拼写错误,即“AssingedDate”与“AssignedDate”,数据库不知道它们指的是同一列。所以这不是 "Too few parameters..." 错误的原因,fwiw。一旦您更正了拼写 - 然后是的 - 列出相同的列名将导致错误。只是一个不同的;-)。
  • @Leigh 你是对的,我没有注意到它的拼写不同。乍一看,它看起来一样。我的坏
  • 尽管如此,这仍然是一个好点,因为它会导致另一个错误。太糟糕了,错误消息是如此神秘。只说“未知或拼写错误的列名”会杀死他们吗? ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多