Utilisation des agrégats FireDac
-
20-12-2019 - |
Question
J'utilise XE6 avec FireDac.J'ai un FDMemTable avec ItemVals comme champ ftfloat.Je voudrais utiliser la fonction d'agrégation de SUM(ItemVals) mais je voudrais que seuls les ItemVals avec une valeur >0 soient ajoutés.ItemVals est un ftfloat mais pour autant que je sache, je ne peux pas attribuer une valeur nulle à un float.J'utilise donc une valeur de -1 pour indiquer (pour moi) une valeur nulle.J'ai essayé SUM(ItemVals)>0 mais cela renvoie simplement un VRAI.Est-ce que quelqu'un peut-il me montrer la bonne direction?Merci.
La solution
Vous pouvez utiliser extended expression syntax
et écris pour ton SUM
condition d'expression avec IIF
et renvoie la valeur du champ lorsqu'elle est supérieure à 0, et 0 lorsqu'elle est inférieure ou égale à 0.Comme ceci :
Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';
Mais revenons au fond de votre question.Vous avez dit que vous ne trouviez pas de moyen d'attribuer une valeur NULL à un champ de ftFloat
Type de données.Je suppose que vous attribuez des valeurs de cette façon :
FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;
Oui, de cette façon, vous ne pouvez vraiment pas attribuer une valeur NULL, mais vous pouvez le faire via le Value
propriété du champ, par exemple :
FDMemTable.FieldByName('ItemVals').Value := NULL;
L'attribution d'une valeur NULL au lieu de -1 décrira beaucoup mieux l'intention d'aucune valeur et simplifiera votre expression agrégée en SUM(ItemVals)
.