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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top