这时候如果用 ClientDataSet 去访问它,在设计期创建的固定字段也是 TSQLTimeStampField 类。但可以用
ClientDataSet.Field[2].AsDateTime 去访问它,因为 TSQLTimeStampField 的
AsDateTime 属性背后的方法帮它自动做了转换,内部已经是 TSQLTimeStamp 类别了。
但是,如果用 TSQLQuery 这个控件直接去访问一个带 TimeStamp 字段的表,比如:
procedure TForm1.Button4Click(Sender: TObject);
begin
with SQLQuery1 do
begin
SQL.Text := 'insert into ATIME (ID, ATIME) values (:ID, :ATIME)';
Params[0].Value := 3;
Params[1].AsDateTime := Now; <----- 这里如果用 TDateTime 给这个 TimeStamp
字段参数赋值,则执行 ExecSQL 会出错。
ExecSQL;
end;
end;
=======================
因此,这里正确的写法应该是:
procedure TForm1.Button4Click(Sender: TObject);
begin
with SQLQuery1 do
begin
SQL.Text := 'insert into ATIME (ID, ATIME) values (:ID, :ATIME)';
Params[0].Value := 3;
Params[1].AsSQLTimeStamp := DateTimeToSQLTimeStamp(Now); 《---- 这里必
须用 AsSQLTimeStamp 给参数赋值。
ExecSQL;
end;
end;