Verwenden von FireDac-Aggregaten
-
20-12-2019 - |
Frage
Ich verwende XE6 mit FireDac.Ich habe eine FDMemTable mit ItemVals als ftfloat-Feld.Ich möchte die Aggregationsfunktion von SUM(ItemVals) verwenden, möchte aber nur ItemVals mit einem Wert >0 hinzugefügt werden.ItemVals ist ein ftfloat, aber soweit ich weiß, kann ich einem Float keinen Nullwert zuweisen.Daher verwende ich einen Wert von -1, um (für mich) einen Nullwert anzuzeigen.Ich habe SUM(ItemVals)>0 ausprobiert, aber es gibt einfach TRUE zurück.Kann mir jemand die richtige Richtung weisen?Danke.
Lösung
Sie können verwenden extended expression syntax
und schreibe für dich SUM
Ausdrucksbedingung mit IIF
und gibt den Feldwert zurück, wenn er größer als 0 ist, und 0, wenn er kleiner oder gleich 0 ist.So:
Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';
Aber zurück zum Kern Ihrer Frage.Sie haben gesagt, dass Sie keine Möglichkeit finden, einem Feld von einen NULL-Wert zuzuweisen ftFloat
Datentyp.Ich vermute, dass Sie Werte auf diese Weise zuweisen:
FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;
Ja, auf diese Weise können Sie wirklich keinen NULL-Wert zuweisen, aber Sie können dies über die tun Value
Eigenschaft des Feldes, z.B.:
FDMemTable.FieldByName('ItemVals').Value := NULL;
Die Zuweisung eines NULL-Werts anstelle von -1 beschreibt die Absicht, keinen Wert zu haben, viel besser und vereinfacht Ihren Aggregatausdruck wieder auf SUM(ItemVals)
.