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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top