In una lezione precedente avevamo trattato di come implementare una semplicissima gestione dei clienti in Access, che potrebbe anche essere usata per qualsiasi altro tipo di anagrafica come gli articoli di magazzino. Nel mio nuovo software gestionale per il magazzino Calus, tutti i prodotti hanno la possibilità di mostrare una foto o immagine, a me sembra molto utile questa caratteristica perché consente di vedere immediatamente anche ad occhio l’oggetto che si sta modificando ed inoltre potrebbe anche essere utilizzata in un sito web per l’e-commerce. Ovviamente la gestione delle immagini e foto in Calus è molto potente perché consente oltre che di scegliere il file anche di acquisirlo tramite WIA ( Windows Image Acquisition ). In questa lezione noi faremo soltanto un semplice esempio, ma che può essere utilizzato in applicazioni reali. Le foto o immagini sono gestite come dati binari che vengono immagazzinati consecutivamente e vanno gestiti con i dati di tipo “Oggetto OLE“, che non sono altro che dati serializzabili, in particolare OLE è l’acronimo di Object Linking and Embedding. Se creiamo una maschera ed inseriamo un campo di tipo “Oggetto OLE“, automaticamente Access inserisce un controllo “Cornice Oggetto Associato” ed oltre a foto ed immagini è possibile inserire qualsiasi tipo di oggetto registrato nel nostro sistema operativo. Questo modo di procedere è molto semplice ed immediato, ma permette di inserire qualsiasi cosa e non possiamo gestire la grandezza dei dati che l’utilizzatore dell’applicativo immette nel database. Per ovviare a questi problemi possiamo far caricare un’immagine o foto con l’indirizzo del file, che in questo modo non andrà nel database, ma avremo soltanto il percorso al file, nella tabella, quindi, al posto di “Oggetto OLE” inseriamo un campo testuale di 250 caratteri e lo rinominiamo in “link”. Prepariamo la maschera con un controllo “Pulsante di Comando” ed uno “Immagine”, apriamo l’editor per il VBA ed inseriamo questo codice
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
Utilizziamo una funzione che risiede nelle librerie del sistema operativo e più precisamente in comdlg32.dll per fare in modo di visualizzare la finestra di scelta del file e poi inseriamo il percorso in un controllo “Immagine”. Potete modificare le proprietà del controllo “Immagine”, facendo in modo di non ritagliare l’immagine, ma espanderla. Ultimo lavoro da fare è prendere la stringa del percorso del file e salvarla nel campo link della tabella, ma se avete seguito le lezioni precedenti potete certamente farlo da soli. Il corso sulla creazione di applicazioni gestionali in Access si conclude qui, penso di avervi spiegato tutte le basi per cominciare a scrivere autonomamente i vostri programmi, se aveste bisogno di aiuto potete contattarmi nel nostro forum online. Per vedere una mia applicazione gratuita in formato sorgente su Access, potete scaricare MerciGest.
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