Introduzione
Una delle sfide più comuni nello sviluppo con Microsoft Access è la gestione delle finestre popup, soprattutto quando è necessario riportare un valore al controllo che ha aperto la finestra. Questo articolo mostra una tecnica efficace per farlo, evitando macro e sfruttando solo Form e codice VBA.
Il problema: aggiornare il controllo padre
Supponiamo di avere una casella combinata che elenca tutti i clienti. Se l’utente fa doppio clic su di essa, vogliamo aprire una finestra popup (una maschera impostata come ) per modificare i dati del cliente selezionato.
Per aprire la maschera e passare l’ID del cliente, usiamo:
DoCmd.OpenForm "frmClienti", , , , , acDialog, Me!IDCliente
All’interno della maschera dei clienti, recuperiamo l’ID passato tramite:
Private Sub Form_Load()
Dim id As Long
id = CLng(Me.OpenArgs)
' Carica il cliente corrispondente
End Sub
Il secondo problema: aggiornare il valore se cambia
Se l’utente modifica il cliente nella finestra popup, anche la casella combinata nel form padre deve aggiornarsi. Per farlo, possiamo usare una tecnica semplice ma efficace: scrivere il nuovo valore nel registro di sistema, e poi leggerlo al momento dell’aggiornamento.
Funzioni VBA utilizzate
SaveSetting "Applicazione", "ClienteAttivo", "ID", Me!IDCliente
GetSetting "Applicazione", "ClienteAttivo", "ID", 0
DeleteSetting "Applicazione", "ClienteAttivo"
Nel form padre, possiamo usare per rileggere il valore e aggiornare il controllo. Dopo l’uso, è buona pratica cancellare la chiave con .
Filosofia di sviluppo
Tutti gli esempi presentati si basano su Form e codice VBA puro, senza macro. Questo approccio garantisce controllo, flessibilità e chiarezza, rendendo Access uno strumento potente per creare applicativi gestionali in tempi rapidi.
Limiti e alternative
Access ha i suoi limiti, soprattutto nella velocità di esecuzione di ricerche complesse. Per questo, in progetti più avanzati, preferisco scrivere le routine critiche in C/C++, usando MFC, STL e ATL. Certo, richiede più tempo, ma i risultati sono software veloci e reattivi. Un esempio concreto è MerciGest, scritto interamente in Visual C++ 10.0.
Risorse e codice sorgente
Puoi consultare esempi pratici e scaricare applicativi open source scritti in Access da me, direttamente dalla pagina dedicata sul sito aziendale. Troverai soluzioni reali, testate, e sempre basate su codice verificabile.