Vediamo come implementare la scheda delle anagrafiche di clienti e fornitori nel programma per magazzino in Access che stiamo creando. In questa lezione vedremo come visualizzare i dati dei clienti e fornitori all’interno di una form o maschera o finestra. Le form in Access sono delle finestre che è possibile ottimizzare per la visualizzazione dei dati all’utilizzatore del programma. Vediamo in visualizzazione struttura come devono essere organizzati i controlli all’interno delle nostre finestre. La predisposizione dei controlli all’interno della finestra ( layout ) è personalizzabile ed ognuno può distribuirli come vuole.
Anche la formattazione, colore e carattere del testo all’interno dei controlli, è personalizzabile, in Access basta utilizzare il menu “Formato“.
Per effettuare delle azioni al caricamento della finestra o soltanto per rispondere ad azioni dell’utente, dobbiamo lavorare a livello di codice VBA ( Visual Basic for Application ). In visualizzazione struttura maschera premiamo sul pulsante della barra degli strumenti “Codice” e verremo proiettati in un editor di testo, nel quale possiamo creare delle routine con un vero e proprio linguaggio di programmazione. In questo corso vedremo come creare un’applicazione per magazzino e non ci soffermeremo sui dettagli del linguaggio, nozioni che devono già essere conosciute.
Il codice necessario al funzionamento delle maschere dei clienti e dei fornitori è uguale per entrambe le maschere, avendo gli stessi controlli e stessi dati.
Option Compare Database
Option Explicit
Private Sub Abi_DblClick(Cancel As Integer)
Banca_DblClick (Cancel)
End Sub
Private Sub Abi_NotInList(NewData As String, Response As Integer)
MsgBox "Fare doppio clic sul campo per inserire
una nuova banca!"
Response = acDataErrContinue
End Sub
Private Sub Agenzia_DblClick(Cancel As Integer)
Banca_DblClick (Cancel)
End Sub
Private Sub Agenzia_NotInList(NewData As String,
Response As Integer)
MsgBox "Fare doppio clic sul campo per inserire
una nuova banca!"
Response = acDataErrContinue
End Sub
Private Sub Banca_DblClick(Cancel As Integer)
On Error GoTo Err_Banca_DblClick
If Not IsNull(Me.OpenArgs) Then Exit Sub
Dim lBan As Long
lBan = 0
If Not IsNull(Me!IDBanca) Then lBan = Me!IDBanca
If lBan = 0 Then
DoCmd.OpenForm "Banche", , , , , acDialog, "GotoNew"
Else
DoCmd.OpenForm "Banche", , , , , acDialog, lBan
End If
lBan = GetSetting("Calus", "RetVal", "Last", 0)
If lBan <> 0 Then Me!IDBanca = lBan
Me.Banca.Requery
Me.ABI.Requery
Me.CAB.Requery
Me.Agenzia.Requery
Me.Indirizzo_Banca.Requery
Me.Comune_Banca.Requery
Exit_Banca_DblClick:
Exit Sub
Err_Banca_DblClick:
MsgBox Err.Description
Resume Exit_Banca_DblClick
End Sub
Private Sub Banca_NotInList(NewData As String,
Response As Integer)
MsgBox "Fare doppio clic sul campo per inserire
una nuova banca!"
Response = acDataErrContinue
End Sub
Private Sub Cab_DblClick(Cancel As Integer)
Banca_DblClick (Cancel)
End Sub
Private Sub Cab_NotInList(NewData As String,
Response As Integer)
MsgBox "Fare doppio clic sul campo per inserire
una nuova banca!"
Response = acDataErrContinue
End Sub
Private Sub Cap_AfterUpdate()
Dim myData As dao.Database, myRec As dao.Recordset
Set myData = CurrentDb
Set myRec = myData.OpenRecordset("Comuni", dbOpenDynaset)
Dim strSQL As String
If Not IsNull(CAP.Value) Then
strSQL = "CAP = '" & CAP.Value & "'"
myRec.FindFirst strSQL
If Not myRec.NoMatch Then
Comune.Value = myRec!Comune.Value
Provincia.Value = myRec!Provincia.Value
End If
End If
myRec.Close
Set myData = Nothing
End Sub
Private Sub Comune_AfterUpdate()
Dim myData As dao.Database, myRec As dao.Recordset
Set myData = CurrentDb
Set myRec = myData.OpenRecordset("Comuni", dbOpenDynaset)
Dim strSQL As String
If Not IsNull(Comune.Value) Then
strSQL = "Comune = '" & Comune.Value & "'"
myRec.FindFirst strSQL
If Not myRec.NoMatch Then
CAP.Value = myRec!CAP.Value
Provincia.Value = myRec!Provincia.Value
End If
End If
myRec.Close
Set myData = Nothing
End Sub
Private Sub Comune_Banca_DblClick(Cancel As Integer)
Banca_DblClick (Cancel)
End Sub
Private Sub Comune_Banca_NotInList(NewData As String,
Response As Integer)
MsgBox "Fare doppio clic sul campo per inserire
una nuova banca!"
Response = acDataErrContinue
End Sub
Private Sub Form_Load()
If Not IsNull(Me!IDCliente) And Not IsNull(Me.OpenArgs) Then
If Me.OpenArgs = "GotoNew" Then
DoCmd.DoMenuItem acFormBar, 3, 0, , acMenuVer70
DoCmd.GoToRecord , , acNewRec
Else
Dim myRec As dao.Recordset
Set myRec = Me.RecordsetClone
myRec.FindFirst "IDCliente = " & Me.OpenArgs
If Not myRec.NoMatch Then Me.Bookmark = myRec.Bookmark
myRec.Close
End If
Else
DoCmd.GoToRecord , , acLast
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
If Not IsNull(Me!IDCliente) Then
SaveSetting "Calus", "RetVal", "Last", Me!IDCliente
Else
SaveSetting "Calus", "RetVal", "Last", 0
End If
Forms![Pannello comandi].Visible = True
End Sub
Private Sub Indirizzo_Banca_DblClick(Cancel As Integer)
Banca_DblClick (Cancel)
End Sub
Private Sub Indirizzo_Banca_NotInList(NewData As String,
Response As Integer)
MsgBox "Fare doppio clic sul campo per inserire
una nuova banca!"
Response = acDataErrContinue
End Sub
Private Sub Tipo_Indirizzo_DblClick(Cancel As Integer)
On Error GoTo Err_Tipo_Indirizzo_DblClick
If Not IsNull(Me.OpenArgs) Then Exit Sub
Dim strTipo As String
strTipo = ""
If Not IsNull(Me![Tipo Indirizzo]) Then
strTipo = Me![Tipo Indirizzo]
End If
If strTipo = "" Then
DoCmd.OpenForm "Tipi di Indirizzo",
, , , , acDialog, "GotoNew"
Else
DoCmd.OpenForm "Tipi di Indirizzo",
, , , , acDialog, DLookup("ID", "Tipo Indirizzo",
"[Nome Tipo indirizzo] = '" & strTipo & "'")
End If
If GetSetting("Calus", "RetVal", "Last", 0) > 0 Then
strTipo = DLookup("[Nome Tipo indirizzo]",
"Tipo indirizzo", "ID = " &
GetSetting("Calus", "RetVal", "Last", 0))
Else
strTipo = ""
End If
If strTipo <> "" Then Me![Tipo Indirizzo] = strTipo
Me.Tipo_Indirizzo.Requery
Exit_Tipo_Indirizzo_DblClick:
Exit Sub
Err_Tipo_Indirizzo_DblClick:
MsgBox Err.Description
Resume Exit_Tipo_Indirizzo_DblClick
End Sub
Private Sub Tipo_Indirizzo_NotInList(NewData As String,
Response As Integer)
MsgBox "Fare doppio clic sul campo per inserire
un nuovo tipo di Indirizzo!"
Response = acDataErrContinue
End Sub
Private Sub Titolo_DblClick(Cancel As Integer)
On Error GoTo Err_Titolo_DblClick
If Not IsNull(Me.OpenArgs) Then Exit Sub
Dim strTit As String
strTit = ""
If Not IsNull(Me!Titolo) Then strTit = Me!Titolo
If strTit = "" Then
DoCmd.OpenForm "Titoli", , , , , acDialog, "GotoNew"
Else
DoCmd.OpenForm "Titoli", , , , ,
acDialog, DLookup("ID", "Titoli",
"[Nome Titolo] = '" & strTit & "'")
End If
If GetSetting("Calus", "RetVal", "Last", 0) > 0 Then
strTit = DLookup("[Nome Titolo]", "Titoli", "ID = " &
GetSetting("Calus", "RetVal", "Last", 0))
Else
strTit = ""
End If
If strTit <> "" Then Me!Titolo = strTit
Me.Titolo.Requery
Exit_Titolo_DblClick:
Exit Sub
Err_Titolo_DblClick:
MsgBox Err.Description
Resume Exit_Titolo_DblClick
End Sub
Private Sub Titolo_NotInList(NewData As String,
Response As Integer)
MsgBox "Fare doppio clic sul campo per inserire
un nuovo titolo!"
Response = acDataErrContinue
End Sub
Il codice è molto semplice da comprendere, in pratica abbiamo soltanto la necessità di mostrare una lista di banche, titoli e tipi di indirizzo che facendo doppio clic sul controllo, deve aprire una finestra modale per fare le modifiche, gli inserimenti e le eliminazioni dei valori dell’elenco; tutte nozioni che ho già spiegato in un articolo di qualche tempo fa sulla creazione delle finestre popup in Access.
<< Lezione Precedente – Lezione Successiva >>


