我没有相同的环境来测试,所以结果对你来说可能会有所不同,但是在 Delphi XE3 和旧版本的 AnyDAC 中,我运行了这个简单的测试:
ADQuery.Close;
ADQuery.SQL.Text := 'CREATE TABLE MyTable (Col NUMERIC)';
ADQuery.ExecSQL;
ADQuery.Close;
ADQuery.SQL.Text := 'INSERT INTO MyTable (Col) VALUES (:Val)';
ADQuery.Params[0].Value := TTime(EncodeTime(1, 2, 3, 4));
ADQuery.ExecSQL;
ADQuery.Close;
ADQuery.SQL.Text := 'SELECT Col FROM MyTable';
ADQuery.Open;
结果是获取的表字段是类型ftLargeint
并且它的值为 0。所以你刚刚失去了这段代码的值。FireDAC 幸运地为您提供了一种更好的方法。您可以创建一个具有自定义TIME
字段类型的表,如下所示:
CREATE TABLE MyTable (Col TIME)
FireDAC 在内部将此类数据类型映射到dtTime
字段类型(在 中进行了描述this topic
),因此您可以本地访问此类字段作为实时字段,例如:
ADQuery.Close;
ADQuery.SQL.Text := 'CREATE TABLE MyTable (Col TIME)';
ADQuery.ExecSQL;
ADQuery.Close;
ADQuery.SQL.Text := 'INSERT INTO MyTable (Col) VALUES (:Val)';
ADQuery.Params[0].AsTime := TTime(EncodeTime(1, 2, 3, 4));
ADQuery.ExecSQL;
ADQuery.Close;
ADQuery.SQL.Text := 'SELECT Col FROM MyTable';
ADQuery.Open;
ShowMessage(FormatDateTime('hh:nn:ss.zzz', ADQuery.Fields[0].AsDateTime));