AS
VBA per Access
Data Access Objects
Ecco un esempio di accesso ai dati con il DAO. Immaginiamo di avere una tabella chiamata tbl_persona con la seguente struttura: id (contatore), nome (string), cognome (string). Immaginiamo anche una maschera chiamata start sulla quale ci siano i tre pulsanti accoda_tbl_persona, cancella_tbl_persona, modifica_tbl_persona e due caselle nominate nome e cognome.
I primi due pulsanti rappresentano un esempio di accesso diretto ai recordset. Il primo avvia la subroutine accoda_tbl_persona_Click che accoda i valori presenti nelle due caselle di testo, il secondo legge i campi uno ad uno e propone delle pop-up per modificare eventualmente i valori.
Il terzo pulsante è un esempio di come eseguire una stringa SQL, in questo caso una semplice DELETE.
Option Compare Database
 
Private Sub nome_AfterUpdate()
Forms!start.Refresh
End Sub
Private Sub cognome_Click()
Forms!start.Refresh
End Sub
 
Private Sub accoda_tbl_persona_Click()
On Error GoTo Err
Dim V_nome As String
If (IsNull(Forms!start.nome.Value) = True) Then
MsgBox ("compilare il campo Nome")
Exit Sub
Else
V_nome = Forms!start.nome.Value
End If
Dim V_cognome As String
If (IsNull(Forms!start.cognome.Value) = True) Then
MsgBox ("compilare il campo Cognome")
Exit Sub
Else
V_cognome = Forms!start.cognome.Value
End If
AccodaDati "tbl_persona", V_nome, V_cognome
MsgBox ("Fatto")
Exit Sub
Err:
MsgBox err.Description
Exit Sub
End Sub
 
Private Sub modifica_tbl_persona_Click()
ModificaDati "tbl_persona"
End Sub
 
Private Sub cancella_tbl_persona_Click()
On Error GoTo Err
Dim V_Warning As String
V_Warning = MsgBox("Pulisci tabella?", 4)
If V_Warning = 6 Then
CancellaDati "tbl_persona"
MsgBox ("fatto!")
End If
Exit Sub
Err:
MsgBox err.Description
Exit Sub
End Sub
Function AccodaDati(NomeTabella As String, Valore1 As String, Valore2 As String)
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset(NomeTabella, dbOpenDynaset)
With rst
.AddNew
!nome = Valore1
!cognome = Valore2
.Update
End With
rst.Close
db.Close
End Function
 
Function ModificaDati(NomeTabella As String)
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim str As String
Set db = CurrentDb
Set rst = db.OpenRecordset(NomeTabella, dbOpenDynaset)
rst.MoveFirst
Dim c As Integer
c = 1
Do While Not rst.EOF
rst.Edit
str = InputBox("Nuovo nome per " + rst!nome + "?", "", rst!nome)
rst!nome = str
str = InputBox("Nuovo cognome per " + rst!cognome + "?", "", rst!cognome)
rst!cognome = str
rst.Update
MsgBox ("modifica record " & c & " ok")
c = c + 1
rst.MoveNext
Loop
rst.Close
db.Close
End Function
 
Function CancellaDati(NomeTabella As String)
Dim db As DAO.Database
Dim sqlStr As String
Set db = CurrentDb
sqlStr = "DELETE FROM " & NomeTabella & ";"
db.Execute sqlStr
db.Close
End Function
Nota. Per le vecchie versioni di Access (fino a 2003) includi fra le librerie selezionate dal Visual Basic Editor, strumenti->riferimenti "Microsoft DAO 3.6 Object Library". Dalla versione 2007 il DAO è incluso nella libreria "Microsoft Office 12.0/14.0* Access database engine Object Library". (*) versione alla data del presente articolo: 27/06/2019
Rendo disponibile il file Access utilizzato per il caso appena illustrato.
Scaricando il seguente file accettate che viene rilasciato così com'è senza alcun tipo di garanzia.