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:

  1. posizionarti sul record di interesse utilizzando l’istruzione rs1.MoveNext (oppure le altre appena viste)
  2. 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