Pregunta

Estoy usando XE6 con FireDac.Tengo un FDMemTable con ItemVals como un ftfloat campo.Me gustaría utilizar los agregados en función de la SUMA(ItemVals) pero me gustaría sólo ItemVals con un valor >0, se añade en.ItemVals es un ftfloat pero por lo que puedo encontrar, no puedo asignar un valor nulo a un flotador.Así que estoy usando un valor de -1 para indicar que (para mí) un valor null.Traté de SUMA(ItemVals)>0 pero sólo devuelve un TRUE.Puede alguien me apunte en la dirección correcta?Gracias.

¿Fue útil?

Solución

Puede utilizar extended expression syntax y escribir para su SUM condición de expresión con IIF y devolver el valor del campo cuando es mayor que 0, y 0 cuando es menor o igual a 0.Como de esta manera:

Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';

Pero volvamos a la raíz de tu pregunta.Usted ha dicho que usted no puede encontrar una manera de asignar un valor NULO en un campo de ftFloat tipo de datos.Mi conjetura es que usted es una asignación de valores de esta manera:

FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;

Sí, de esa manera usted realmente no puede asignar un valor NULO, pero usted puede hacerlo a través de la Value propiedad del campo, por ejemplo:

FDMemTable.FieldByName('ItemVals').Value := NULL;

La asignación de valor NULL en lugar de -1 mucho mejor describen la intención de ningún valor, y simplificar su expresión de agregado de vuelta a SUM(ItemVals).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top