Ultima modifica 21 Settembre 2020 by Maurizio Matetich

L’istruzione Do While – Loop permette di eseguire ripetutamente alcune istruzioni.  Le istruzioni vengono eseguite finchè una condizione non risulta vera.

L’istruzione Do While – Loop è utilizzata quando si vogliono analizzare i record delle tabelle di un database Access

Il formato generico è:

Do While (condizione)

istruzioni da eseguire ripetutamente

Loop

Per fare riferimento ad una tabella possiamo utilizzare la variabile rs (che significa RecordSet) e le varie istruzioni collegate.

Chiariamo tutto con un semplice esempio.

Ho una tabella Vendite che contiene i campi Codice, Quantità, PrezzoUnitario e PrezzoTotale.

Office online - vendite calcolo prezzo totale

Voglio calcolare il prezzo totale per ogni articolo e voglio scrivere il valore nel campo corrispondente. Nel nostro esempio i record sono solo 3 e quindi potrei fare tutto manualmente. Ma se i record fossero 1000 oppure 10.000?

Vediamo come risolvere il problema in modo semplice e veloce.

Per prima cosa devo collegarmi con la tabella Vendite e posizionarmi sul primo record:

Dim rs1 As DAO.Recordset

‘da utilizzare nel caso di tabella locale
Set rs1 = CurrentDb.OpenRecordset(“Vendite”, dbOpenTable)

rs1.MoveFirst

a questo punto dobbiamo trovare la condizione da utilizzare nell’istruzione While.

Dobbiamo specificare che vogliamo calcolare il prezzo totale per tutti i record e quindi vogliamo scorrere tutti i record fino all’ultimo.

Si utilizza l’istruzione Not rs1.EOF per indicare “finché non siamo alla fine del file” Infatti EOF vuol dire End of File.

Do While Not rs1.EOF
rs1.Edit
rs1.Fields(“PrezzoTotale”) = rs1.Fields(“Quantita”) * rs1.Fields(“PrezzoUnitario”)
rs1.Update
rs1.MoveNext

Loop

MsgBox “Prezzi totali calcolati”

rs1.Close
Set rs1 = Nothing

Il risultato finale in tabella sarà:

Office online - vendite calcolo prezzo totale 2

 

Conclusione:
abbiamo visto che l’istruzione Do While Loop permette, in modo semplice, di scorrere tutto l’elenco dei record di una tabella e per ogni record è possibile modificare un campo.

In alcuni caso è possibile ottenere lo stesso risultato con una query di aggiornamento. Ma non sempre 🙂