Newsgroup: it.comp.lang.delphi
Titolo: calcolo di un progressivo ???







ho un problemino.


in una tabella interrogata da una query ho aggiunto 
un campo calcolato che mi dovrebbe visualizzare il saldo progressivo dei record 
(nella tabella ho i campo importo dare e importo avere). il problema è che se mi 
visualizzo i risultati in una DBGrid, il campo calcolato mi si ricalcola allo 
scorrimento della griglia proponendomi dei valori del saldo progressivo 
completamente sballati. Non mi basta mettere a false il metodo autoCalcField 
alla query in quanto non cambia niente. come posso fare?? Oppure qualcuno mi sa 
indicare il metodo migliore per crearsi un campo contenente il saldo progressivo 
dei record ??


ciao 
Gianlorenzo



Ma per fare il calcolo, i dati (dare avere), li prendi direttamente dal
record o dalla griglia?.....forse l'errore stà proprio lì
....poi non ho capito bene se il saldo lo devi fare riga per riga o a fine
griglia
Ciao
Gianni Giusti

crearsi un campo contenente il saldo progressivo dei record ??
Ti crei un campo calcolato, e usi una variabile privata alla form.
Nell'evento OnScrollField (o qualche altro + adatto) scrivi:
LastValue:=LastValue+Table1['Saldo'];
Table1['Saldo']:=LastValue;
Ricordati che prima di un refresh devi azzerare LastValue
Ciao
--
Piero Bonanno
bop...@libero.it
pie...@tiscalinet.it
bpie...@hotmail.com
______________________________________________
"Madame, lei ha tra le gambe uno strumento
che puo' offrire piacere a migliaia di persone,
e tutto quello che sa fare e' grattarlo"
- Sir Thomas Beechan a una violoncellista







ciao gianni,


il progressivo lo devo fare riga per 
riga:


esempio


 


dare           
avere          
saldo   progressivo


 


 


10               
5                
        5


2                
4                        
3


1               
5                        
-1


 


quindi dare meno avere per ogni riga dalla seconda 
riga parto dal saldo della riga


precedente a cui sommo il saldo del record 
letto  ecc..


 


grazie mille in anticipo. 
ciao







Piero grazie del consiglio ma non sono riuscito a 
trovare niente su OnScrollField.


 


un codice come quello che mi hai indicato l'ho già 
scritto nell'evento OnCalcField


ma guando 'scrollo' la griglia di visualizzazione 
mi si sballano i dati del saldo che sono veritieri fino a quando la 
'scrollatura' dei dati fino ad allora non visualizzati nella 
griglia.


grazie comunque



grazie comunque
Puoi provare gli eventi del datasource collegato alla tabella. Il
meccanismo funzia perche' l'ho gia' provato (ma non mi ricordo come
facevo). L'unico problema e' che devi trovare un evento adatto ad
azzerare la variabile.


Sembrava un problema banale....invece è 1/2 ora che ci sto provando
(premetto che ho gia provato vari eventi, sia del ttable che della
dbgrid.....ma niente):
l'unica soluzione che ho trovato è questa:
Invece di un dbgrid, usi una normale griglia, poi fai la scansione
dell'intera tabella. Ad ogni riga metti i valori nella griglia e provvedi al
calcolo.....lo so che non è molto bello, ma con i campi calcolati non sono
riuscito a risolvere il problema (.....quelle maledette somme del dare
avere!!!).
Praticamente .........
Dichiari due variabili: sommadare, sommaavere,sommaavere di tipo intero
table.first;
i:=0;
while (not table.eof) do begin
                    i:=i+1;
                    sommadare:=sommadare+tabledare.value;
                    sommaavere:=sommaavere+tableavere.value;
                    differenzariga:=sommaavere-sommadare;
                    metti tutto nella riga "i" della griglia
(tabledare.value, tableavere.value, differenza);
                    table.next;
                    end;
.......è l'unica soluzione trovata.....magari riesci a prendere spunto per
qualcosa di migliore, o qualcuno ti posta una soluzione sicuramente
migliore......comunque ora vado a letto, ma domani ci do' un'occhiata a
mente fresca....
Ciao
Gianni Giusti





grazie ancora gianni, in effetti quella da te 
proposta è l'unica soluzione che fino ad ora è l'unica soluzione valida che 
avevo già preso in considerazione. il problema è che hai una notevole quantità 
di dati da gestire e l'evento è ripetuto allora il tutto diventa un po' lento. 
E' una questione di puntiglio, ormai.


ciao