gpt4 book ai didi

sqlite - FireDAC:节省 SQLite DB 的时间

转载 作者:行者123 更新时间:2023-12-02 03:57:19 26 4
gpt4 key购买 nike

我是 FireDAC 新手,遇到问题。我想在Delphi XE7中使用FireDAC读写SQLite数据库。我尝试的大部分方法都有效,但我在将 TTime 保存到 SQLite DB 时遇到问题。

这有效:

FDQuery1.Fields[0].AsString := EdName.Text;

这不会:

FDQuery1.Fields[1].Value := TeTime.Time; // TeTime = TTimeEdit (FMX)
为什么?第一个字段是“REAL”,第二个字段是“NUMERIC”,如下所述: https://www.sqlite.org/datatype3.html

谢谢,鲁玛

最佳答案

我没有相同的环境进行测试,因此结果可能会有所不同,但在使用旧版本 AnyDAC 的 Delphi XE3 中,我运行了这个简单的测试:

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 DB 的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com