Ms access Coldfusion输入表单&;时间

Ms access Coldfusion输入表单&;时间,ms-access,coldfusion,Ms Access,Coldfusion,为什么时间没有插入数据库。它给了我这个错误 “执行数据库查询时出错。 INSERT INTO语句中存在[Macromedia][SequeLink JDBC驱动程序][ODBC套接字][Microsoft][ODBC Microsoft Access驱动程序]语法错误 资源: 启用健壮异常信息以提供有关错误源的更详细信息。在管理员中,单击调试和日志记录>调试输出设置,然后选择健壮异常信息选项。 检查ColdFusion文档以验证您使用的语法是否正确。 搜索知识库以找到问题的解决方案 浏览器Moz

为什么时间没有插入数据库。它给了我这个错误

“执行数据库查询时出错。
INSERT INTO语句中存在[Macromedia][SequeLink JDBC驱动程序][ODBC套接字][Microsoft][ODBC Microsoft Access驱动程序]语法错误

资源: 启用健壮异常信息以提供有关错误源的更详细信息。在管理员中,单击调试和日志记录>调试输出设置,然后选择健壮异常信息选项。 检查ColdFusion文档以验证您使用的语法是否正确。 搜索知识库以找到问题的解决方案

浏览器Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.2;Trident/7.0) 远程地址127.0.0.1 推荐人//本地主机:8500/Travel/toursInsert.cfm?APTANA_NOCACHE_1388693909596=1388693909596 日期/时间2014年1月2日下午03:18”


备注

提交人姓名

图像ID

插入CommentsDB(备注、用户、图像ID、时间) 值(“#form.备注”、“#form.Users”、“#form.Image_ID”、#DateTimeFormat(todayDateTime,“yyyy.MM.dd hh:nn aaa”)#
您需要以odbc日期时间格式授予访问权限

尝试使用createodbcdatetime()而不是使用dateformat


此外,还应该对insert语句中的每个值使用cfqueryparam作为传递到数据库的值的最终验证。带有SQL类型日期时间的cfqueryparam将使处理日期和时间变得更容易。

您是否在cfadministrator中创建了数据源? 如果是的话,应该解决

<cfif IsDefined("form.InsertComments")>
   <cfquery datasource="AccessTest">
       INSERT INTO CommentsDB (Remarks, Users, Image_ID, Time)
       VALUES (
          <cfqueryparam value="#form.Remarks#"/>,
          <cfqueryparam value="#form.Users#"/>,
          <cfqueryparam value="#form.Image_ID#"/>,
          <cfqueryparam value="#DateTimeFormat(now(),'mmm-dd-yyyy')#")/>
   </cfquery>
</cfif>

插入CommentsDB(备注、用户、图像ID、时间)
价值观(
,
,
,

说明:

暂时忽略最佳实践,原始查询存在几个问题

第一个潜在的问题是,将其作为列名的错误选择。IIRC,使用保留字作为对象名是您看到的错误的一个原因。如果是这种情况,您可以选择:

  • 重命名列以完全避免冲突(最佳选项)…或
  • ,即
    插入到([时间],…)
#日期时间格式(todayDateTime,“yyyy.MM.dd hh:nn aaa”)#

其次,插入字符串时似乎没有使用引号。原始字符串值必须用引号括起来。否则,数据库会将该值解释为某种类型的对象(表名、列名等),从而导致语法错误

第三,无论如何都不应该在日期/时间列中插入字符串。日期字符串是不明确的,并且可能会根据数据库设置而被误解。因此,即使查询成功,最终也可能插入错误的日期。要获得一致的结果,请改为使用日期对象。例如,您可以使用CF
now()
功能:

注意:日期对象应该而不是用引号括起来

推荐:

但是,尽管如此,还是不建议在查询中使用原始值。相反,您应该在所有查询参数中使用
cfqueryparam
。它提供了许多重要的好处,其中最重要的一点是保护您的数据库不受sql注入的影响。(另外,你不必担心诸如令人讨厌的报价问题)

将以上所有提示放在一起,您的查询应该如下所示。我将让您更新
cfsqltypes
,以匹配表列的数据类型

   <cfquery datasource="AccessTest">
      INSERT INTO CommentsDB (Remarks, Users, Image_ID, YourTimeColumnName )
      VALUES  
      (
         <cfqueryparam value="#form.Remarks#" cfsqltype="cf_sql_longvarchar">
         , <cfqueryparam value="#form.Users#" cfsqltype="cf_sql_varchar">
         , <cfqueryparam value="#form.Image_ID#" cfsqltype="cf_sql_integer">
         , <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
      )
   </cfquery>

插入CommentsDB(备注、用户、图像ID、YourTimeColumnName)
价值观
(
, 
, 
, 
)

如果access具有返回当前日期和时间的内容,请在查询中使用它,而不要从ColdFusion中传递该特定值。首先,您应该在查询中使用
cfqueryparam
。其次,为什么要使用access?有更好的解决方案,例如MySQL和PostgreSQL,它们是免费的、更强大的、更安全的更好的选择。用
#now()#
替换
#DateTimeFormat(todayDateTime,“yyyy.MM.dd hh:nn aaa”)#
,并测试它。Access有一个可以获取当前日期时间的函数。1)请发布完整的错误消息,包括生成的SQL 2)
时间
列的数据类型是什么:varchar还是datetime?而且,
Time
对于列名来说是一个错误的选择,因为它是。如果未正确转义,将其用作对象名可能会导致语法错误。createodbcdatetime()不是必需的。如果您在查询参数中使用now()作为值,它将起作用。我认为更广泛的一点是,他应该插入datetime对象,而不是字符串。这就是说,
createODBCDateTime
now()
都返回一个日期对象,因此两者都将使用
cfsqltype=“cf\u sql\u timestamp”
。(虽然从技术上讲,
createODBCDateTime(now())
是多余的。)他得到的错误是语法错误。如果是数据源问题,他将收到完全不同的错误。此插入仅执行日期,而不是日期时间1)始终使用
cfqueryparam
指定
cfsqltype
。否则你会失去很多好处。2) 如果目标是日期/时间列,则应使用日期对象而不是字符串。已检测到以“CF”开头的标记。此版本的ColdFusion不支持此标记。请验证您的输入错误,然后重试。未知标记:cfquerparam。ColdFusion无法确定如何处理标记cfquerparam,因为标记
    INSERT INTO TableName ( SomeDateTimeColumn )
    VALUES ( #now()# )
   <cfquery datasource="AccessTest">
      INSERT INTO CommentsDB (Remarks, Users, Image_ID, YourTimeColumnName )
      VALUES  
      (
         <cfqueryparam value="#form.Remarks#" cfsqltype="cf_sql_longvarchar">
         , <cfqueryparam value="#form.Users#" cfsqltype="cf_sql_varchar">
         , <cfqueryparam value="#form.Image_ID#" cfsqltype="cf_sql_integer">
         , <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
      )
   </cfquery>