Newsgroup: it.comp.appl.access
Titolo: mastrino

Ho un archivio moviment che archivia le operazioni contabili. La struttura é
la seguente: n°, data, importo, contodare, scontodare, contoavere,
scontoavere. I movimenti sono archiviati nella seguente maniera:
1    01/01/00    110.000    4    1    13    1
2    02/01/00     50.000    12   1     4     1
3    04/01/00    120.000    4    1    21    1
ho creato una query che mi filtra solo i record che hanno 4    1 in
contodare e scontodare oppure in contoavere e scontoavere, come faccio però
a creare un campo saldo che mi esegua a fianco di ogni record il calcolo
sommando l'importo se 4 1 é  contodare e scontodare mentre lo sottrae se é
contoavere e scontoavere (un banale mastrino)
saldo
1    01/01/00    110.000    4    1    13    1        110.000
2    02/01/00     50.000    12   1     4     1          60.000
3    04/01/00    120.000    4    1    21    1        180.000
matteo

 ha scritto nel messaggio
news:8uehsj$a3u$1...@fe1.cs.interbusiness.it...

Prova con questa query e chiamala Query3:
SELECT MOVIMENT.NUM_MOV, MOVIMENT.DAT_MOV, MOVIMENT.DESC_MOV,
MOVIMENT.IMP_MOV, MOVIMENT.CONTODARE, MOVIMENT.SCONTODARE,
MOVIMENT.CONTOAVERE, MOVIMENT.SCONTOAVERE,
IIf([MOVIMENT].[CONTODARE]=4,IIf([MOVIMENT].[SCONTODARE]=1,[MOVIMENT].[IMP_M
OV],[MOVIMENT].[IMP_MOV]*-1),[MOVIMENT].[IMP_MOV]*-1) AS A,
DSum("A","Query3","NUM_MOV<=" & [NUM_MOV]) AS B
FROM MOVIMENT;
Perchè funzioni così come è scritta la devi chiamare Query3.
--
Roberto
---------------------------------------------
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------


Sei stato molto gentile. Oltre a copiarla ho anche cercato di capirla. Tutto
OK per quanto riguarda il valore che ricavi su A mentre di B non riesco a
capire il criterio "NUM_MOV<="&[NUM_MOV]; cosa significa numero movimento
minore o uguale a numero movimento?
Matteo


"NUM_MOV<="&[NUM_MOV] rappresenta il criterio della funzione DSum (vedi
help) e quindi va letto in quel contesto; i criteri di una funzione che
opera sui dominii si scrivono con la stessa sintassi di una WHERE (vedi
help);  tramite la funzione DSum ho chiesto ad Access di sommare il campo
"A" contenuto nel dominio "Query3" per tutti quei record per i quali il
campo NUM_MOV č <= al campo NUM_MOV del record corrente.
Oltre a DSum, sull'help, dai uno sgardo anche a DCount e DLookup; vedrai che
quando le conoscerai le adopererai spesso.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------


Volevo dirti che ho notato che il calcolo Dsum é molto lento. Mi hanno detto
di indicizzare Num_mov e l'ho fatto, ma non ho risolto molto, mentr se tolgo
la funzione é una scheggia. E' normale ed eventualmente non esiste una
strada più veloce (per es. query su query)
Ciao
Matteo


Tutte le funzioni che lavorano sui dominii sono lente; OGNI riga di Query3
legge TUTTI i record della tabella MOVIMENT.
Di contro mi hai chiesto esplicitamente che volevi realizzarlo con una
query, e con una query questa è l'unica soluzione che sono in grado di
suggerirti.
Forse registrandoti nella tabella MOVIMENT IMP_MOV già con il segno, ed
effettuando la DSum sulla tabella anziché sul campo A della query guadagni
in tempo: è da provare.
Certamente ci sono modi più veloci; visto che sicuramente il risultato lo
devi poi stampare, prova a realizzare il tutto con un report richiedendo il
totale
parziale a livello NUM_MOV; oppure creati una query per ordinare la tabella
per NUM_MOV, quindi apri un recordset su questa query, leggilo tutto e
copiatelo in una tabella temporanea aggiornando un campo in cui registri il
progressivo.
Insomma, vedi tu.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------