Pubblicato il 20 Settembre 2020 da Maurizio Matetich
Quando si lavora con Microsoft Access e si usano molte tabelle prima o poi c’è la necessità di leggere i record e/o modificare il contenuto dei campi.
In pratica vuoi posizionarti in un determinato record di una tabella e sapere cosa c’è scritto in un determinato campo. Semplice ? sì se sai come fare 🙂
Come accedere ad una tabella
Innanzitutto devi sapere che ci sono due tipi di tabelle: le tabelle presenti all’interno del tuo database e le tabelle collegate.
Le istruzioni VBA per accedere ai due tipi di tabelle sono ovviamente diverse. Vediamo come fare e quale codice VBA utilizzare.
Dobbiamo dichiarare una variabile che, di solito, viene chiamata rs seguito da un numero. Quindi se devo usare 3 tabelle devo definire le variabili rs1, rs2, rs3.
Rs è una abbreviazione della parola RecordSet (= insieme di record)
Dim rs1 As DAO.Recordset
‘da utilizzare nel caso di tabella locale
Set rs1 = CurrentDb.OpenRecordset(“NomeTabella”, dbOpenTable)
oppure
‘da utilizzare nel caso di tabella collegata
Dim dbsDati As Database
Set dbsDati = DBEngine.Workspaces(0).OpenDatabase(“c:\cartella del database\nome_database.accdb”)
Set rs1 = dbsDati.OpenRecordset(“NomeTabella”, dbOpenTable)
A questo punto possiamo utilizzare una serie di istruzioni per muoverci tra i record. Dobbiamo pensare che la variabile rs1 è come “una freccia” che si può spostare su e giù tra i record di una tabella.
‘per posizionarmi sul primo record userò l’istruzione
rs1.MoveFirst
‘per spostarmi sul record successivo
rs1.MoveNext
‘per tornare al record precedente
rs1.MovePrevious
‘per posizionarmi sull’ultimo record
rs1.MoveLast
Se pensiamo alla variabile rs1 come ad una freccia è intuitivo capire cosa succede.
Leggere il contenuto di un campo
Per poter “vedere” cosa si trova all’interno di un campo, devi fare due cose:
- posizionarti sul record di interesse utilizzando l’istruzione rs1.MoveNext (oppure le altre appena viste)
- leggere il campo utilizzando l’istruzione rs1.Fields(“NomeCampo”)
Ad esempio, se vuoi capire se nel secondo record, il contenuto di un campo è maggiore di 10 scriverò
rs1.MoveFirst
rs1.MoveNext
if rs1.Fields(“NomeCampo”) >10 then
… istruzioni
End if
ovviamente il campo deve essere di tipo numerico.
Scrivere in un campo
E’ possibile scrivere all’interno di un campo. In questo caso puoi utilizzare queste istruzioni:
‘voglio scrivere (edit) in un campo il numero 15
rs1.Edit
rs1.Fields(“NomeCampo”) = 15
‘aggiorno (update) il campo
rs1.Update
per non avere errori, il tipo dati del campo che vuoi aggiornare, deve essere compatibile con ciò che andrai a scrivere.
Quindi fai attenzione a non mescolare campi di tipo data con dati numerici, oppure campi numerici con stringhe di testo.
Aggiungere un record
Altro caso che si può presentare è la necessità di aggiungere un nuovo record. In questo caso si utilizzano queste istruzioni:
‘aggiungo un nuovo record e in un campo scrivo un testo, nel secondo campo scrivo una data
rs1.AddNew
rs1.Fields(“NomeCampo1”) = “testo di prova”
rs1.Fields(“NomeCampo2”) = #30/08/2020#
rs1.Update
puoi notare che il testo (detto anche stringa di testo) deve essere tra virgolette. Invece la data deve avere il simbolo “cancelletto” # all’inizio e alla fine della data.
Istruzioni di chiusura
Dopo aver lavorato sui record e sui campi della tabella, è necessario “chiudere” il collegamento e rilasciare la risorsa. Puoi utilizzare queste semplici istruzioni:
rs1.Close
Set rs1 = Nothing
E’ importante ricordarsi di chiudere tutti i riferimenti alle tabelle utilizzate. Quindi le due istruzioni appena viste vanno ripetute per tutte le tabelle che abbiamo utilizzato.
Un esempio pratico
Abbiamo la tabella collegata Colori che contiene due campi: NomeColore e CodiceRGB.
La tabella è vuota. Voglio creare 3 nuovi record che contengono i colori verde, rosso e blu e i relativi codici RGB.
Se hai letto con attenzione tutto l’articolo, hai già capito come fare! Ricordati che le varie istruzioni sono come i famosi mattoncini. Le puoi combinare insieme per ottenere il tuo risultato.
Dim rs1 As DAO.Recordset
‘la tabella è collegata
Dim dbsDati As Database
Set dbsDati = DBEngine.Workspaces(0).OpenDatabase(“c:\cartella del database\nome_database.accdb”)
Set rs1 = dbsDati.OpenRecordset(“Colori”, dbOpenTable)
rs1.AddNew
rs1.Fields(“NomeColore”) = “verde”
rs1.Fields(“CodiceRGB”) = “0, 255, 0”
rs1.Update
rs1.AddNew
rs1.Fields(“NomeColore”) = “rosso”
rs1.Fields(“CodiceRGB”) = “255, 0, 0”
rs1.Update
rs1.AddNew
rs1.Fields(“NomeColore”) = “blu”
rs1.Fields(“CodiceRGB”) = “0, 0, 255”
rs1.Update
rs1.Close
Set rs1 = Nothing
Se ci pensi, è semplice!
Conclusione
Abbiamo visto quali sono le (poche) istruzioni da conoscere per potersi muovere agevolmente tra record e campi. Con queste istruzioni puoi fare tutto (o quasi). Le hai già provate? Hai trovato qualche difficoltà? Scrivi la tua esperienza nei commenti.
Hai qualche esigenza particolare? Fissa una consulenza con me
Buonasera, avrei una domandata riguardo la lettura del valore di un campo di un record specifico. Che differenza c’è, a livello di VBA, tra il metodo da lei suggerito e la funzione DLookUP?
salve Giovanni, la funzione Dlookup di solito viene utilizzata per cercare il valore di un campo all’interno di un record. Ad esempio all’interno di una tabella Anagrafica posso cercare un ID e ottenere la ragione sociale corrispondente. Il metodo che ho descritto nell’articolo permette di aggiungere dei nuovi record oltre a muoversi tra i vari record. Sono due utilizzi differenti da utilizzare in base alle esigenze. Buon lavoro!