我沒有同樣的環境下測試,所以結果可能會有所不同你,但在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