SQL 语句如果写为: insert into MyTab values (:ID, :ADATE, :AMESSAGE)
那么,FdQuery 就有三个参数,其中 Params[1].Value := Now; 或者 Params[1].AsDateTime := Now; 或者 Params[1].AsSQLTimeStamp := DateTimeToSQLTimeStamp(Now); 最终在执行 ExecSQL 语句的时候,都会出异常,提示是数据格式转换错误。
没查到这里该如何对付 TimeStamp 字段的参数的数据类型。
但是,查到:http://docwiki.embarcadero.com/RADStudio/XE8/en/Date_and_Time_Macro_Functions_%28FireDAC%29
这里面是 FireDAC 的内置函数的描述。不过我测试过上述网页中提到的很多函数,运行时都提示该函数不支持(也就是说 XE8 带的 FireDAC 内置函数支持不如上述网页里列出来的多)。
但是,关于 TimeStamp 的一个函数支持。因此,SQL 语句写成:
insert into SYS_INFO values (:UID, CURRENT_TIMESTAMP , :AMESSAGE )
上述语句中, UID 是字符串类型的参数;AMESSAGE 是整数类型的参数。这个 FdQuery 有两个参数。中间那个时间字段,直接用 CURRENT_TIMESTAMP 这个内置函数。Windows 底下运行测试通过。