Gestione di Immagini e Foto in Access

Come archiviare le immagini non come dati OLE, bensì con il semplice indirizzo, in questo modo si evita un ingrossamento del database.

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.

<< Lezione PrecedenteInizio Corso

Un commento

  1. 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

I commenti sono chiusi.

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Modifica preferenze cookie