Usando agregados FireDac
-
20-12-2019 - |
Pergunta
Estou usando XE6 com FireDac.Eu tenho um FDMemTable com ItemVals como campo ftfloat.Gostaria de usar a função agregada de SUM(ItemVals) mas gostaria que apenas ItemVals com valor> 0 fossem adicionados.ItemVals é um ftfloat, mas até onde posso descobrir, não consigo atribuir um valor nulo a um float.Portanto, estou usando um valor -1 para indicar (para mim) um valor nulo.Eu tentei SUM(ItemVals)>0 mas ele apenas retorna um TRUE.Alguém pode me apontar na direção certa?Obrigado.
Solução
Você pode usar extended expression syntax
e escreva para o seu SUM
condição de expressão com IIF
e retorne o valor do campo quando for maior que 0 e 0 quando for menor ou igual a 0.Assim:
Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';
Mas voltando à raiz da sua pergunta.Você disse que não consegue encontrar uma maneira de atribuir um valor NULL a um campo de ftFloat
tipo de dados.Meu palpite é que você está atribuindo valores desta forma:
FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;
Sim, dessa forma você realmente não pode atribuir um valor NULL, mas pode fazê-lo através do Value
propriedade do campo, por exemplo:
FDMemTable.FieldByName('ItemVals').Value := NULL;
Atribuir o valor NULL em vez de -1 descreverá muito melhor a intenção de nenhum valor e simplificará sua expressão agregada de volta para SUM(ItemVals)
.