Newsgroup: it.comp.appl.access
Titolo: access97 urgente

Salve,
In una maschera e in un report ho la necessità di indicare in un controllo
la differenza tra campo "km" del record e lo stesso  campo "km" del record
precedente.
Sto' facendo un programma per la gestione dei consumi di gasolio degli
automezzi,e quindi devo indicare la differenza in km  tra  l'ultimo pieno di
gasolio e quello precedente.Chiaramente ogni record deve indicare questa
differenza.
Non so se mi sono spiegato comunque grazie per l'aiuto.

 ha scritto nel messaggio
news:wE2x5.32813$XZ4.3...@news.infostrada.it...

Poiché non hai dato alcuna indicazione circa la struttura delle tabelle e di
come sono in relazione fra loro, ipotizzo io un'architettura; mi è
necessaria per spiegarti la soluzione.
Presuppongo che ci sia una tabella (Tabella1) che contiene l'anagrafica dei
tuoi automezzi: contiene fra gli altri un campo chiamato IdAutomezzo che ne
è la chiave primaria.
Presuppongo inoltre che ci sia una tabella (Tabella2) che contiene un record
per ogni rifornimento di carburante; ipotizzo che abbia la seguente
struttura:
IdRifornimento           Contatore e Chiave primaria
IdAutomezzo             Numerico
DataRifornimento    Data/ora
KmAttuali                  Numerico
KmPrecedenti          Numerico
Differenza                 Numerico
Le due tabelle sono fra di loro in relazione uno-a-molti tramite il campo
IdAutomezzo.
Ho inserito nella tabella anche i campi calcolati, così non avrai problemi
di calcolo nel report.
A questo punto creati una query con raggruppamento (Query1) che abbia il
seguente codice SQL:
SELECT Tabella2.IdAutomezzo, Max(Tabella2.KmAttuali) AS MaxDiKmAttuali
FROM Tabella2
GROUP BY Tabella2.IdAutomezzo
ORDER BY Tabella2.IdAutomezzo;
Creati una maschera (Sottomaschera) con visualizzazione a Maschere continue
e che abbia come origine record Tabella2.
Creati una maschera (Maschera1) che abbia come origine record Tabella1 e che
contiene anche un controllo sottomaschera nel quale inserirai Sottomaschera.
A fronte dell'evento "Dopo aggiornamento" del controllo KmAttuali di
Sottomaschera genera il seguente codice VBA:
Private Sub KmAttuali_AfterUpdate()
Me![KmPrecedenti] = DLookup("MaxDiKmAttuali", "Query1", "[IdAutomezzo]=" &
[Forms]![Maschera1]![IdAutomezzo])
If Not IsNull(Me![KmPrecedenti]) Then
Me![Differenza] = Me![KmAttuali] - Me![KmPrecedenti]
End If
End Sub
Ti consiglio di scrivere anche del codice a fronte dell'evento "Prima di
aggiornare" di KmAttuali, nel quale verificherai che, per l'automezzo
corrente e per il rifornimento corrente, i kilometri digitati siano maggiori
di quelli digitati nel rifornimento precedente.
Roberto


Nell'ipotesi che i km percorsi siano progressivi
=[KmPercorsi]-DMax("KmPercorsi";"RifornimentiAutomezzi";"KmPercorsi<" &
[KmPercorsi] & "AND IdAutomezzo=" & [IdAutomezzo])
Ciao Nicola
email: metti inwind al posto  di NOSPAM

Scusa ma io sono = a 0 ! dove devo metterla questa formula ?
Nicola Ardito <men...@NOSPAM.it> wrote in message
8q2p8n$g0e$1...@nread1.inwind.it...


 >


 Stefano
[CUT]
Al fine di non andare fuori tema nel risponderti o comunque per non darti
una risposta parziale, come ti ho detto nella mia risposta precedente è per
me necessario conoscere la struttura delle tue tabelle che io ho chiamato
Tabella1 e Tabella2; indica inoltre in base a quali campi sono in relazione
fra di loro; mentre è intutivo cosa sia IdAutomezzo, non mi è per niente
chiaro cosa sia IdRicambio.
Roberto

 >
La metti come origine controllo di una casella di testo che chiamerai come
ti pare
Ciao Nicola
--
email:sostituire tin a NOSPAM

 ha scritto nel messaggio



Mi sembra di capire che IdRicambio è un campo inserito nella tabella che io
ho chiamato Tabella2 e rappresenta la causale della spesa sostenuta per un
certo automezzo ad un certo chilometraggio: ovvero potrebbe assumere il
valore 1 per tutti irifornimenti carburante, 2 per tutti icambi di olio, 3
per tutti icambi gomme ecc., e a te serve, per un certo automezzo, effetuare
la differenza di chilimetri con l'intervento precedente che aveva lo stesso
IdRicambio.
Se così è le modifiche da apportare alla soluzione che ti ho proposto non
riguardano assolutamente la DLookup, che resterà immutata, ma riguardano:
1) La struttura della tabella che ho chiamato Tabella2 e che diventa:
IdRifornimento           Contatore e Chiave primaria
IdAutomezzo             Numerico
IdRicambio                Numerico
DataRifornimento    Data/ora
KmAttuali                  Numerico
KmPrecedenti          Numerico
Differenza                 Numerico
-------------------------------
2) La maschera che ho chiamato Sottomaschera che deve contenere anche una
casella di testo chiamata IdRicambio associata al campo IdRicambio di
Tabella2; questa casella di testo devi posizionarla in maniera tale che devi
digitare i dati in essa (1, 2, 3 ecc.) prima di digitare i chilometri in
KmAttuali.
-------------------------------
3) Il codice SQL di Query1 che deve diventare il seguente:
SELECT Tabella2.IdAutomezzo, Max(Tabella2.KmAttuali) AS MaxDiKmAttuali
FROM Tabella2
GROUP BY Tabella2.IdAutomezzo, Tabella2.IdRicambio
HAVING
(((Tabella2.IdRicambio)=[Forms]![Maschera1]![Sottomaschera]![IdRicambio]));
------------------------------
Come ti ho già detto sopra non devi apportare alcuna modifica al codice VBA
generato a fronte dell'evento "Dopo aggiornamento" del controllo KmAttuali
di Sottomaschera.
Fammi sapere se ho capito ciò che ti serviva.
Roberto