Usando gli aggregati di FireDac.
-
20-12-2019 - |
Domanda
Sto usando XE6 con FireDac.Ho un fdmemtable con itemvals come campo ftfloat.Vorrei usare la funzione Aggregati della somma (articoli articoli) ma vorrei solo ItemVals con un valore> 0 da aggiungere. Itemvals è un ftfloat ma per quanto posso trovare, non posso assegnare un valore nullo a un galleggiante.Quindi sto usando un valore di -1 per indicare (a me) un valore nullo.Ho provato Sum (ItemVals)> 0 Ma restituisce solo un vero.Qualcuno può indicarmi nella giusta direzione?Grazie.
Soluzione
È possibile utilizzare extended expression syntax
e scrivi per la tua condizione di espressione SUM
Con IIF
e restituire il valore del campo quando è maggiore di 0 e 0 quando è inferiore o uguale a 0. Come in questo modo:
Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';
.
Ma torna alla radice della tua domanda. Hai detto, che non puoi trovare un modo per assegnare un valore nullo a un campo di tipo di dati ftFloat
. La mia ipotesi è che stai assegnando valori in questo modo:
FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;
.
Sì, in questo modo non puoi davvero assegnare un valore nullo, ma puoi farlo attraverso il Value
Proprietà del campo, ad esempio:
FDMemTable.FieldByName('ItemVals').Value := NULL;
.
Assegnazione del valore nullo anziché -1 descriverà molto meglio l'intenzione di nessun valore e semplifica la tua espressione aggregata Torna a SUM(ItemVals)
.