Bonjour,
J'ai une BDD SQLite3 sur laquelle je fais une requête qui doit me retourner une valeur réelle (champ "Rating2" dans les ex. ci-dessous).
Si je fais une requête comme ça, tout va bien:
Résultat ok, affiché:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 with qry do begin SQL.Text := 'SELECT Rating2 FROM Matchs WHERE (Date < ''1912-04-01'') AND (Team1 = 9740 OR Team2 = 9740) ORDER BY DATE DESC LIMIT 1'; Open; f := Fields[0].AsFloat; AddToLog(Format('Rating: %g, [f])); end;
Mais si je fais comme ça...Rating: 950,640991210938
...j'ai une exception:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 with qry do begin SQL.Clear; SQL.Add('SELECT CASE'); SQL.Add(' WHEN Team1 = 9740 THEN Rating1'); SQL.Add(' WHEN Team2 = 9740 THEN Rating2'); SQL.Add('END'); SQL.Add('FROM Matchs WHERE (Date < ''1912-04-01'') AND (Team1 = 9740 OR Team2 = 9740)'); SQL.Add('ORDER BY Date DESC LIMIT 1;'); Open; f := Fields[0].AsFloat; AddToLog(Format('Rating: %g', [f])); end;
!?!?Exception class EConvertError with message ''950.640991210938' is not a valid floating point value'.
Dans les deux cas, c'est la même valeur de la même ligne qui est recherchée (950.64...), pourquoi est-ce que ça provoque une exception dans le second ? J'ai également essayé avec:
Pareil
Code : Sélectionner tout - Visualiser dans une fenêtre à part f := StrToFloat(Fields[0].AsString);
Partager