Immagini in database

di il
14 risposte

Immagini in database

Ciao a tutti,
devo in un database inserire circa 1000 immagini.
Leggendo ho capito che non bisogna assolutamente inserirle nel database, ma metterle in una cartella e richiamarle.
Ho trovato questo link https://support.microsoft.com/it-it/kb/28582.
La procedura è giusta?
In questo modo non avrò problemi vero?

Altra domanda
Ho una tabella cosi composta:
ImageID
Codice
txtImageName
esiste un modo per compilare in automatico la casella "txtImageName", mettendo il valore della casella "codice" + il suffisso .png

Esempio
ImageID: 1
Codice: 5587
txtImageName: 5587.png

Allego file del database creato
Allegati:
20278_ed95caa4f17bab618d4b2530b4b89ce0.rar
20278_ed95caa4f17bab618d4b2530b4b89ce0.rar

14 Risposte

  • Re: Immagini in database

    Di assolutamente c'e' solo che prima o poi si tirano le cuoia e, se fossimo in America, si devono pagare le tasse

    Le immagini si possono mettere all'interno di un DB, dentro una colonna BLOB.
    Solo che in generale non conviene: se devi inserire l'immagine dentro una pagina web, devi solo aggiungere alla pagina un path relativo, invece che dover accedere al DB per estrarre lo stream di byte che rappresentano l'immagine.
  • Re: Immagini in database

    La logica è corretta...
    L'assegnazione del Nome Completo è questione di nulla... dal momento che dovrai selezionare un file immagine dovrai posizionarlo nella cartella Immagini ed anche rinominarlo con il nome che salverai nel db.

    Ci sono 3 considerazioni da aggiungere.
    1) attenzione ai formati immagine... se hai intenzione di distribuire il tuo applicativo con il Runtime dovranno essere solo BMP oppure dovrai usare API(GDI e GDI+) per convertirle in BMP se vorrai visualizzarle in quanto non vengono distribuiti i filtri di conversione... quindi non riconosciuti.

    2) Non potrai mai visualizzare immagini in maschere continue usando questa tecnica... ma solo se le carichi come file Immagine in Tabella.
    Per questo, se devi usare le maschere continue, e devi gestire poche immagini(una decina al massimo) devi ragionarci prima... e magari potrebbe convenire avere un approccio doppio... ovvero delle thumbnails da inglobare e le foto grandi per il dettaglio in cartella...
    Ovviamente queste tecniche richiedono sempre molta conoscenza del codice, si fa tutto con API, purtroppo Access non ha il controllo PictureBox di VB6 che faceva tutto... quindi serve tirarsi su le maniche.
    Se devi gestire molte immagini devi abbandonare l'idea di farlo con Oggetti Nativi..., andando su Controlli Activex di 3° parti come ListView... purtroppo per Access non sono molti quelli compatibili e non sono gratis.

    3) Attenzione alla necessità di memorizzare o meno il percorso completo... se il Db deve essere spostabile o non risiede in rete in un path definito forse potrebbe valer la pena memorizzare un path relativo e non assoluto... e ricostruirlo in fase di caricamento.
  • Re: Immagini in database

    Perfetto grazie mille.
    Ho corretto, il formato delle immagini mettendo .bmp. Successivamente andrò a modificare anche il percorso mettendo un path relativo.
    Ho un problema
    Ho creato il report, basandomi sempre su questa guida. https://support.microsoft.com/it-it/kb/28582.
    Ma non funziona, le immagini non cambiano al tipo di record.
    Ho riprovato a rifare il procedimento più volte, ma non riesco a capire dove sbaglio. E' come se nel report non venga caricata la funzione personalizzata, il codice "modulo1"
    Dove sbaglio?
    Allego database creato
    Allegati:
    20278_98702fbd4ff2d0cc60e4b2779beb1c7e.rar
    20278_98702fbd4ff2d0cc60e4b2779beb1c7e.rar
  • Re: Immagini in database

    Non continuare ad allegare il tuo DB, sinceramente io non li apro MAI se non espressamente necessario...

    In ogni caso per caricare le Immagini nel Report, devi inserire un Controllo Immagine nella Sezione in cui hai il Path recuperabile.
    Di solito è il CORPO, quindi su Evento FORMAT, si carica l'immagine assegnando alla proprietà PICTURE del controllo il Percorso Completo.
  • Re: Immagini in database

    Ciao,
    è quello che ho fatto, o meglio quello che penso di aver fatto.
    Ho creato su CORPO il controllo immagine "ImageFrame" e il path "txtImageName"
    Nel controllo immagine su proprietà --> Formato --> Immagine--> 5587.bmp (sono andato con sfoglia a dire dove sono le immagini)
    Poi sempre su visualizzazione struttura, click in alto a sinistra seleziono il report --> evento --> su corrente --> [Routine evento]

    Il report è stato fatto come dal link dell esercizio
     Report: rptImage
       -----------------------
       Etichetta: Image Report
       OrigineRecord: tblImage
    
       Controllo immagine
       ----------------------------------
       Nome: ImageFrame
       Immagine: "C:\Windows\Zapotec.bmp"
    
       Casella di testo
       -------------------------
       Nome: txtImageID
       OrigineControllo: ImageID
    
       Casella di testo
       ------------------------------
       Nome: txtImageName
       OrigineControllo: txtImageName
    
       Casella di testo
       -------------------------
       Nome: txtImageNote
       OrigineControllo: <Vuoto>
    				
    il codice che ho inserito
    Option Compare Database
    Option Explicit
    
    Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
        Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName)
    End Sub
    ma non funziona.
    P.s. Ho allegato il file database per agevolare le persone, per avere l'esercizio già pronto.
  • Re: Immagini in database

    Mi pareva di aver detto Evento Format non Print...

    Di solito non copio il codice altrui, quindi ti faccio un ESEMPIO semplice.
    Ipotizzo tu abbia nel Corpo(Detail è in Inglese devi fare attenzione...) un controllo Immagine chiamato [ImageFrame] e la Casella di Testo che contiene il Percorso che si chiama [txtImageName].
    
    Option Compare Database
    Option Explicit
    
    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
        Me!ImageFrame.Picture=Me!txtImageName   ' Quì deve esserci il PATH completo "C:\NomeCartella\SottoCartella\NomeFile.BMP"
    End Sub
    Ovviamente io inserirei il controllo presenza Immagine... ma quello dopo...

    Fai attenzione ad aprire il REPORT in modalità ANTEPRIMA e NON LAYOUT per verificare, in quanto non verrebbero caricate le immagini non venendo generati gli eventi.
  • Re: Immagini in database

    Ciao Alex,
    grazie per l'aiuto, ma sono una capra, perché anche così non mi funziona, l'immagine non cambia.
    Domanda, non esiste su internet un file di esempio, in modo da poterlo studiare e capire dove sbaglio.

    Aggiornamento:
    Provando a pasticciare, andando su controllo immagine [ImageFrame] e mettendo su origine controllo delle proprietà "txtImageName"
    il report funziona. Ho tolto anche il codice.
    Quali possono essere i problemi adottando questa soluzione?
  • Re: Immagini in database

    Sei sicuro di aver usato il tipo di controllo giusto..?
    Secondo me non hai usato un controllo immagine ma un controllo associato... puoi verificare..?
  • Re: Immagini in database

    Ho usato questa
  • Re: Immagini in database

    Mmmmm ho una versione di access diversa ma secondo me è l'ultimo a destra della 2° riga... subito dopo la checkbox e prima della graffetta.
  • Re: Immagini in database

    Ho provato anche ad utilizzare l'altra icona. ma non funziona. Sicuramente sbaglio io a fare un passaggio.

    Adesso però mi viene un dubbio, poiché utilizzo access 2016.
    Utilizzando il controllo immagine che ho indicato nelle freccia, ed mettendo nelle proprietà, su origine controllo il path "txtImageName", il report funziona (sia in anteprima di stampa che layout). Ho provato anche a mettere diverse immagini pesanti 24mb ciascuna, e la dimensione del database non cambia.Se cancello dalla cartella le immagini, il database risulta vuoto.
    Domanda:
    Non è che nella nuova versione, hanno aggiunto una nuova funzione, risolvendo il problema della gestione immagini nei database?
  • Re: Immagini in database

    GUarda ho aperto il tuo DEMO, ho modificato questo nel REPORT:
    Option Compare Database
    Option Explicit
    
    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
        Dim strPATH        As String
        
        strPATH = CurrentProject.Path & "\" & Me.txtImageName
        If Len(Dir(strPATH)) > 0 Then
            Me.ImageFrame.Picture = CurrentProject.Path & "\" & Me.txtImageName
        End If
    End Sub
    Da me funziona tutto...
  • Re: Immagini in database

    Grazie Alex per l'aiuto,
    Ho provato a rifare tutto dall'inizio,per evitare errori, ma continua a non funzionare.
    Adesso stà diventando una questione di principio.
    Riesci ad allegare il file modificato, così faccio la prova del nove. Così capisco se è questione di versione access , oppure sono io.
  • Re: Immagini in database

    Non serve io rialleghi un DB, ho preso il tuo, aperto il REPORT, eliminato il tuo codice ed inserito proprio quello che ho scritto...!

    Io credo di sapere cosa non va..., e te lo dissi dal 1° post... non stai usando la VISUALIZZAZIONE ANTEPRIMA ma LAYOUT ed ovviamente non può andare.
Devi accedere o registrarti per scrivere nel forum
14 risposte