我正在尝试使用FireDac查询数据库。这是我的代码;
procedure TfSMSViewer.LoadSMSFromDatabase(path: AnsiString);
var
con: TFDConnection;
query: TFDQuery;
LI: TListItem;
B: Int64;
begin
con := TFDConnection.Create(nil);
query := TFDQuery.Create(con);
con.LoginPrompt := False;
con.Open('DriverID=SQLite;Database=' + Path +' ;');
query.Connection := con;
query.SQL.Text := 'SELECT * FROM sms';
query.Open;
query.First;
While Not Query.EOF Do
Begin
LI := ListView1.Items.Add;
LI.Caption := inttostr(query.Fields[4].AsLargeInt); //This line
if query.FieldValues['type'] = 1 then
LI.SubItems.Add('Incoming')
else
LI.SubItems.Add('Outbound');
LI.SubItems.Add(query.FieldValues['address']);
LI.SubItems.Add(query.FieldValues['body']);
Query.Next;
End;
end;
但突出显示的行无法正常工作。在数据库中,此列中设置的示例值为1418421520957(UNIX时间戳)。
执行该行代码时,结果为1082313277。
SQLite数据库中的数据类型设置为Integer。我用来调试它的免费软件显示正确的值。在调试我的代码时,在进行任何分配之前从数据库中提取不正确的值。
我的TListView
中填充的某些值也被否定了。
TFDQuery
不支持大整数吗?我怎样才能解决这个问题?
由于
答案 0 :(得分:3)
这是我修复它的方法,来自TLama的建议。也许这对某人或我未来的自己都有用。
con := TFDConnection.Create(nil);
query := TFDQuery.Create(con);
with query.FormatOptions do begin
OwnMapRules := True;
with MapRules.Add do begin
SourceDataType := dtInt32;
TargetDataType := dtInt64;
end;
end;
答案 1 :(得分:0)
“数据库”列的“ BIGINT”可以解决此问题