|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2000
Messaggi: 1135
|
[C#] Soluzione logica problema
Salve, vi spiego la situazione:
io inserisco record in un db in cui un campo "valore" inserisco appunto un valore monetario; io vorrei che quando la somma del campo valore supera i valori di X (o multipli di esso) debba fare una operazione ma solamente la 1° volta che supera la soglia Il mio problema appunto è quella di creare un algoritmo che risolva il problema. X= 90 Valore 10 --> niente 40 --> niente 30 --> niente 15 --> sum 95 superato X, prima volta, eseguo operazione 20 --> sum 105 superato X, seconda volta, niente 60 --> sum 165 superato X, seconda volta, niente 25 --> sum 190 superato X*2, prima volta, eseguo operazione 20 --> sum 210 superato X*2, seconda volta, niente ps: ovviamente posso registrare il fatto di aver superato la soglia per la prima volta
__________________
Ultima modifica di Napalm : 14-07-2009 alle 12:03. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
te la cavi con un "counter" inizializzato a 1 e che viene incrementato di 1 ogni volta che superi un multiplo del tuo numero X.
A questo punto basta che ogni volta che confronti il risultato della somma del campo attuale con le somme già accumulate, se il risultato è uguale o maggiore a "X*counter" (counter vale 1 all'inizio) fai quello che devi fare e incrementi counter di 1.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2005
Città: Resana - TV
Messaggi: 960
|
Esempio in T-SQL, assolutamente non controllato, assolutamente non la migliore soluzione
Codice:
CREATE PROCEDURE dbo.InserisciEdEseguiSeSommaMaggioreUgualeASoglia
(
@nuovoValore FLOAT
,@soglia FLOAT
)
AS
DECLARE @sommaValorePreInsert FLOAT
SELECT @sommaValorePreInsert = SUM(Tabella.Valore)
FROM Tabella
WHERE ...
INSERT INTO Tabella
VALUES (@nuovoValore)
IF @sommaValorePreInsert < @soglia BEGIN
DECLARE @sommaValorePostInsert FLOAT
SELECT @sommaValorePostInsert = SUM(Tabella.Valore)
FROM Tabella
WHERE ...
IF @sommaValorePostInsert >= @soglia BEGIN
FAI QUELLO CHE DEVI
END
END
END
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
10 --> niente 40 --> niente 30 --> niente 15 --> sum 95 superato X, prima volta, eseguo operazione 20 --> sum 115 superato X, seconda volta, niente 60 --> sum 175 superato X, seconda volta, niente 25 --> sum 200 superato X*2, prima volta, eseguo operazione 20 --> sum 220 superato X*2, seconda volta, niente Non so se cerchi una soluzione più Sql o più C#, comunque puoi risolvere semplicemente usando come incremento il valore stesso della "soglia" 90, senza contatori o variabili boolean accessorie : Codice:
private static int sum = 0;
//oppure calcolo sum facendo la Select Sum dal DB...
private static int incrSogliaSum = 90;
//calcolo della prossima soglia basata su sum attuale
private int sogliaSum = sum / incrSogliaSum * incrSogliaSum;
Codice:
if (sogliaSum == 0) { sogliaSum = incrSogliaSum; }
MessageBox.Show(sogliaSum.ToString(),"Soglia =");
//inserimento nuovo record
int nuovoValore = Convert.ToInt32(textBox1.Text) ;
//insert ...
//...
sum += nuovoValore;
if ( sum >= sogliaSum )
{
//esegui operazione
MessageBox.Show(sum.ToString(),"Eseguita Operazione su sum =");
//...
sogliaSum += incrSogliaSum;
}
La prima MsgBox informa sul "cambio di soglia", mentre la seconda è una simulazione del tuo "esegui operazione"... Funziona con un sum=0 ( DB vuoto ), ma anche con sum casuale > 0, nel qual caso sum andrà calcolato ad ogni apertura dell'applicazione, mentre la prossima "sogliaSum" viene calcolata in auto, basandosi sul sum attuale. Prova... |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:54.




















