FireDac查询没有正确读取大整数

时间:2015-02-12 22:58:12

标签: delphi

我正在尝试使用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中填充的某些值也被否定了。 Values loaded into the listview from my code

TFDQuery不支持大整数吗?我怎样才能解决这个问题?

由于

2 个答案:

答案 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”可以解决此问题