我没有同样的环境下测试,所以结果可能会有所不同你,但在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));
编译器告诉你什么是确切的错误?由于您没有向我们提供错误消息,因此我只假设您的代码无法编译(我从未使用过SQLite或FireDAC)。当你不提供这些信息时,像我这样从未使用第三方工具组合的人无法回答。但有了这个简单的错误信息,我可能会回答你的问题。 –
将您的SQLite时间字段创建为'TIME',而不是'NUMERIC'(['这里是FireDAC映射'](http://docwiki.embarcadero.com/RADStudio/XE7/en/Using_SQLite_with_FireDAC#Mapping_SQLite_to_FireDAC_Data_Types))。然后,您可以舒适地使用'AsTime'或'AsDateTime'投射。 – TLama
@JerryDodge:没有错误信息,那就是问题所在。当我使用上面的代码时,字段的值仅设置为0。然而,阅读作品: SeTime.Text:= FDQuery1.Fields [1] .AsString; – LuMa