1
CREATE TABLE [Table1] (
[OrderNumber] integer,
[Amount] float
);
Verwendung TSQLQuery
von dbExpress-Bibliothek.Wie bekomme ich den korrekten Datentyp des Aggregatefeldes?
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Text := 'select sum(Amount) from Table1 group by OrderNumber';
SQLQuery1.Open;
SQLQuery1.First;
Memo1.Lines.Add(FloatToStr(SQLQuery1.Fields.FieldByNumber(1).AsFloat));
Als Ergebnis erhalte ich:
Ausnahmeklasse EDatabaseError mit der Meldung 'nicht Feld zugreifen kann 'COLUMN0' als Typ Float'.
Aber wenn ich versuche, Wert als String
, gibt es keinen Fehler. Es funktioniert:
Memo1.Lines.Add(SQLQuery1.Fields.FieldByNumber(1).AsString);
Wie Daten in Float
bekommen?
Siehe diese Frage https://stackoverflow.com/questions/32814875/how-in-delphi-can-i-force-an-sqlite-aggregate-field-to-be-a-numeric-field Sie könnten casten .. –
@JohnEasley Ich habe versucht, alle Varianten 'Select Cast (Summe (Betrag) als float) aus Table1 ...', 'wählen Sie Summe (Betrag) * 1.0 aus Table1 ...' und so weiter, aber habe denselben Fehler – HeathRow
Seltsam, dass der Fehler Spalte0 referenziert, wenn Sie Spalte1 verwenden. Haben Sie versucht, 'SELECT OrderNumber, sum (Amount) FROM Tabelle1 Group by OrderNumber' so zu wählen, dass beide Spalten in der Ergebnismenge sind? –