Introduzione
In una lezione precedente abbiamo visto come implementare una semplice gestione dei clienti in Access, facilmente adattabile anche ad altre anagrafiche, come gli articoli di magazzino. Nel mio software gestionale MerciGest, evoluzione della precedente bozza in Access, ogni prodotto può essere associato a una foto o immagine, una funzionalità che trovo estremamente utile per riconoscere visivamente l’oggetto, sia in fase di modifica che in contesti come l’e-commerce.
Perché integrare immagini in un gestionale
- Migliora l’esperienza utente: si riconosce subito l’articolo
- Riduce gli errori di selezione o modifica
- Permette di esportare immagini per cataloghi o siti web
- Aggiunge valore visivo e professionale al database
Due approcci alla gestione immagini in Access
1. Oggetto OLE (Object Linking and Embedding)
Access consente di gestire immagini come dati binari serializzabili, usando il tipo di campo “Oggetto OLE”. Quando si crea una maschera con questo campo, Access inserisce automaticamente un controllo chiamato Cornice Oggetto Associato, che può contenere:
- Foto
- Immagini
- Qualsiasi oggetto registrato nel sistema operativo
Questo metodo è semplice e immediato, ma ha dei limiti:
- Non si controlla la dimensione dei dati immessi
- Il database può crescere rapidamente
- Non è ottimale per applicazioni distribuite o web
2. Percorso file (link esterno)
Per una gestione più leggera e controllata, si può salvare solo il percorso dell’immagine in un campo testuale. In questo caso:
- Si crea un campo “link” di tipo testo (max 250 caratteri)
- Si prepara la maschera con un controllo “Immagine” e un “Pulsante di Comando”
- Si carica l’immagine da file, senza inserirla nel database
Questo approccio è più efficiente, soprattutto per applicazioni reali e scalabili.
Esempio pratico in VBA
Nel modulo VBA della maschera, possiamo usare un codice simile a questo per caricare l’immagine da file:
Option Compare Database
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
     "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
   lStructSize As Long
   hwndOwner As Long
   hInstance As Long
   lpstrFilter As String
   lpstrCustomFilter As String
   nMaxCustFilter As Long
   nFilterIndex As Long
   lpstrFile As String
   nMaxFile As Long
   lpstrFileTitle As String
   nMaxFileTitle As Long
   lpstrInitialDir As String
   lpstrTitle As String
   flags As Long
   nFileOffset As Integer
   nFileExtension As Integer
   lpstrDefExt As String
   lCustData As Long
   lpfnHook As Long
   lpTemplateName As String
End Type
Function LaunchCD(strform As Form) As String
   Dim OpenFile As OPENFILENAME
   Dim lReturn As Long
   Dim sFilter As String
   OpenFile.lStructSize = Len(OpenFile)
   OpenFile.hwndOwner = strform.Hwnd
   sFilter = "Tutti i Files (*.*)" & Chr(0) & "*.*" & Chr(0) & _
      "JPEG Files (*.jpg)" & Chr(0) & "*.JPG" & Chr(0)
   OpenFile.lpstrFilter = sFilter
   OpenFile.nFilterIndex = 1
   OpenFile.lpstrFile = String(257, 0)
   OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
   OpenFile.lpstrFileTitle = OpenFile.lpstrFile
   OpenFile.nMaxFileTitle = OpenFile.nMaxFile
   OpenFile.lpstrInitialDir = "C:\"
   OpenFile.lpstrTitle = "Selezionare un file immagine"
   OpenFile.flags = 0
   lReturn = GetOpenFileName(OpenFile)
   If lReturn = 0 Then
      MsgBox "Nessun file selezionato!", vbInformation, _
           "Selezionare un file immagine"
   Else
       LaunchCD = Trim(Left(OpenFile.lpstrFile,
                 InStr(1, OpenFile.lpstrFile,
                 vbNullChar) - 1))
   End If
End Function
Private Sub Comando0_Click()
   Dim strFile As String
   strFile = LaunchCD(Me)
   If Not IsNull(strFile) Or Len(strFile) > 0 Then
      Immagine1.Picture = strFile
   End If
End Sub
Caricamento immagini tramite comdlg32.dll
Per rendere l’esperienza ancora più completa, possiamo utilizzare una funzione di sistema contenuta nella libreria comdlg32.dll, che consente di aprire la classica finestra di dialogo per la selezione dei file. Una volta scelto il file immagine, il percorso viene inserito nel controllo “Immagine” della maschera.
È possibile personalizzare le proprietà del controllo per fare in modo che l’immagine venga espansa anziché ritagliata, migliorando la resa visiva. L’ultimo passaggio consiste nel salvare il percorso del file nel campo “link” della tabella: se avete seguito le lezioni precedenti, saprete già come farlo in modo semplice e sicuro.
Conclusione del corso
Con questo modulo si conclude il nostro percorso sulla creazione di applicazioni gestionali in Access. Abbiamo toccato tutte le basi fondamentali per permettervi di iniziare a sviluppare i vostri progetti in autonomia, con metodo e consapevolezza.
Se avete bisogno di supporto, potete scrivermi nei commenti.
Per vedere un esempio concreto, potete scaricare gratuitamente MerciGest per Access, la mia applicazione gestionale per il magazzino, disponibile anche in formato sorgente.
 Seguimi su LinkedIn
    Seguimi su LinkedIn
   Seguimi su Facebook
    Seguimi su Facebook
  
Grazie mille!!
Esempio chiarissimo e facile da implementare.
Praticamente ricercato, trovato, copiato, incollato ed eseguito in meno di cinque minuti.
Complimenti e bravo
Giorgio Roncolato