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.

War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top