Immagini in database

di il
3 risposte

Immagini in database

Salve, da qualche giorno sto realizzando un database per la gestione di Studenti. Tra le varie cose già fatte, sto sperimentando un sistema per associare un'immagine (volto studente) al suo ID.

Su vari forum ho notato varie soluzione ma volevo un parere sul mio approccio personale:

In tabella (oltre ai vari campi ID, COGNOME, NOME, ecc...) ho aggiunto un campo FOTO con tipo dati TESTO BREVE (o TESTO LUNGO se serve)

In una maschera, dedicata all'inserimento dei dati (Cognome, Nome, ecc...) ho inserito oggetto immagine (con un immagine di default incorporata).

Su evento Click su questo oggetto immagine apro una finestra di dialogo e vado a scegliere un' immagine, poi vado ad aggiornare la tabellla con il percorso dell'immagine
Private Sub imgFotoNominativo_Click()
Dim Finestra As FileDialog
Dim FileSelezionato
Dim Percorso As String
        
    If [IdNominativo] <> "" Then
    
        Set Finestra = Application.FileDialog(msoFileDialogOpen)
            
            With Finestra
                .Title = "Scegli foto"
                .Filters.Clear
                .Filters.Add "File immagine *.bmp, *.jpg, *.png", "*.bmp; *.jpg; *.png", 1
                .AllowMultiSelect = False
            
                If .show = True Then
    
                    For Each FileSelezionato In Finestra.SelectedItems
    
                        Percorso = FileSelezionato
                        Refresh
                        CurrentDb.Execute "UPDATE tblNominativi SET Foto = '" & Percorso & "' WHERE IdNominativo = " & [IdNominativo]
                        Me.imgFotoNominativo.Picture = Percorso
                    Next
                Else
                    Exit Sub
                End If
            End With
        Else
            Exit Sub
        End If
        
End Sub
Su un'altra form ho un estrazione di questi dati (solo Cognome, Nome e FOTO) e proprio la foto la vado a predente grazie al percorso indicato in tabella. Ho effettuato anche un sistema di controllo che se questa cartella o anche solo il file (Foto) non esiste più perché sostata o cancellata, allora l'oggetto immagine mostra la picture di default impostata in origine.

Per il momento sembra che tutto funzioni.

Cosa ne pensate? E' fattibile come idea? E' migliorabile? Oppure c'è di meglio?

Grazie.

3 Risposte

  • Re: Immagini in database

    Con le nuove versioni di Access, puoi associare il controllo Immagine direttamente al Campo [Percorso] in Tabella sensa passare per la proprietà Picture.
  • Re: Immagini in database

    Bene. Ho fatto come suggerito ed ho risparmiato un bel po' di righe di codice. Adesso però ho un problema:

    ho una maschera continua che ha origine dati da una query. All'interno di questa maschera ho inserito un oggetto immagine che non può essere associata a nessun campo della tabella ma (solo per questa maschera) mi ricavo il contenuto dell'immagine attraverso la proprietà Picture:
    imgFotoOperatore.Picture = ThisUser.foto
    FOTO è un campo in una tabella (operatori) che contiene il percorso di dove si trova l'immagine.
    THISUSER invece contiene i valori di ogni singolo campo in tabella, estratti attraverso una funzione, grazie all'apertura di un recordset.
    Public Sub set_user(cognome As String)
    'imposta utente corrente
        
        Set rs = CurrentDb.OpenRecordset("SELECT * FROM operatori WHERE cognome = '" & cognome & "'")
        If Not rs.EOF And Not rs.BOF Then
            With ThisUser
                .level = rs!qualifica
                .surname = rs!cognome
                .name = rs!nome
                .id_user = rs!id_op
                .role = Nz(rs!ruolo, "")
    >>>>>       .foto = rs!PercorsoFotoOperatore   <<<<<
                .id_session = 0
            End With
            rs.Close
            Debug.Print "User '" & cognome & "' correctly set."
        Else
            Debug.Print "No user '" & cognome & "' found in table 'Operatori'."
        End If
        Set rs = Nothing
    End Sub
    
    Finché all'interno del campo FOTO c'è un percorso, allora nell'oggetto immagine (imgFotoOperatore) compare l'immagine indicata attraverso il percorso. Ma se il campo è vuoto ovviamente il valore mi ritorna NULLO.

    Avevo pensato a:
    imgFotoOperatore.Picture = Nz(ThisUser.foto, "")
    Ma così mi restituisce l'oggetto immagine vuoto (proprio perché gli dico che se il campo è nullo allora fallo diventare vuoto). Invece io vorrei che mi facesse apparire l'immagine di default che gli avevo incorporato al principio.

    La strada più semplice forse è quella di salvare l'immagine di default in una percorso e richiamarla quando mi capita questo inconveniente, ma vorrei evitare. C'è una soluzione diversa al mio problema
  • Re: Immagini in database

    Nelle maschere continue DEVI usare il controllo immagine ASSOCIATO... altrimenti non potrai visualizzare nulla... se non il record corrente.
Devi accedere o registrarti per scrivere nel forum
3 risposte