2015-02-12 2 views
2

Я пытаюсь запросить базу данных с помощью FireDac. Вот мой код;Запрос 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 устанавливается в целое. Бесплатное программное обеспечение, которое я использую для отладки, показывает правильное значение. При отладке моего кода некорректное значение извлекается из базы данных до того, как будет выполнено какое-либо присвоение.

Также некоторые значения, заполненные в моем TListView, отрицаются. Values loaded into the listview from my code

TFDQuery не поддерживает большие целые числа? Как я могу это исправить?

Благодаря

+0

Каков тип данных в самой колонке базы данных? Имеет ли SQLite большой целочисленный тип данных? (IIRC, это не так.) Трудно сказать, почему ценности не то, что вы ожидаете, если не объясните, что у вас есть для данных, на которые вы обращаетесь в первую очередь. При размещении вопроса здесь, пожалуйста, помните, что у нас есть абсолютно нулевая информация для использования, кроме того, что вы нам предоставляете; мы не можем читать ваши мысли или видеть ваш экран с того места, где мы сидим. –

+0

Тип данных установлен в целое. Бесплатное программное обеспечение, которое я использую для просмотра базы данных вне моего приложения, отображает значение правильно. –

+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; 
Смежные вопросы