Collegamento immagini esterne in sottocartelle

di il
9 risposte

Collegamento immagini esterne in sottocartelle

Buongiorno a tutti, è da un po' che non scrivo nel forum.

Premetto che uso Access da meno di un anno e con il VBA so fare cose abbastanza di base.

PROBLEMA:
Ho una maschera continua, dove per ogni record, nella casella di testo "txtNomeFoto" è presente appunto il nome di una foto.

Con un pulsante, apro una maschera popup "frmImmagine" in cui mi deve caricare la foto esterna in formato jpg, a partire da suddetto nome.

Nella maschera frmImmagine ho creato un elemento immagine vuoto.

Il codice è il seguente:
Private Sub cmdImmagine_Click()
Dim Foto As String
Foto = Me.txtNomeFoto.Value & ".jpg"
DoCmd.OpenForm "frmImmagine"
Forms!frmImmagine.Immagine.Picture = "C:\FOTO\2019\" & Foto
End Sub
Funzionerebbe benissimo, se non fosse che le foto sono salvate in varie sottocartelle rispetto al percorso che ho specificato nel codice. Le sottocartelle hanno pure nomi non prevedibili.

Esiste un modo per far si che Access vada a cercare la foto in tutte le sottocartelle presenti nel percorso C:\FOTO\2019\?


Grazie in anticipo..

9 Risposte

  • Re: Collegamento immagini esterne in sottocartelle

    Scusa, ma non capisco dove è il problema.
    Chi inserisce il nome foto nel database sa anche dove si trova la foto. Oppure sa il nome della foto a prescindere? Non credo.
    A questo punto, invece di avere un campo testo, hai un campo "Collegamento ipertestuale" e il problema è risolto, e anzi, non avresti neanche bisogno della maschera di visualizzazione, perché access ti apre l'immagine con il software predefinito in windows per l'estensione del file immagine.

    Ciao.

    Alex66
  • Re: Collegamento immagini esterne in sottocartelle

    alex66 ha scritto:


    Scusa, ma non capisco dove è il problema.
    Chi inserisce il nome foto nel database sa anche dove si trova la foto. Oppure sa il nome della foto a prescindere? Non credo.
    A questo punto, invece di avere un campo testo, hai un campo "Collegamento ipertestuale" e il problema è risolto.

    Ciao.

    Alex66
    É un po' più complesso. Inserendo una serie di dati nel database, la maschera restituisce una stringa (nella casella txtNomeFoto) altro non è che il nome della foto. Poi scatto una foto che per forza di cose viene memorizzata all'interno una sottocartella nel percorso di cui sopra. Quindi copio suddetta stringa dalla maschera e rinomino il file.

    Tutto sarebbe più semplice se potessi salvare tutte le foto direttamente in un percorso generico, ma purtroppo devo adattare la mia applicazione ad un ecosistema che non ho pensato io..
  • Re: Collegamento immagini esterne in sottocartelle

    Se devi intervenire sul nome foto, puoi benissimo spostare la stessa nella cartella da te scelta,
    oppure rinomini la foto --> tasto destro mouse --> proprietà --> percorso, lo selezioni e copi e lo incolli nel campo della procedura di inserimento collegamento ipertestuale.
    Certo, non è agevole come procedura, ma ti risolve il problema e anzi, non avresti neanche bisogno della maschera di visualizzazione, perché access ti apre l'immagine con il software predefinito in windows per l'estensione del file immagine.
    Ce l'ho avuto anche io lo stesso problema nel mio ultimo progetto in fase di lavorazione.
    Ma se qualcuno ha una soluzione migliore...

    Ciao.

    Alex66
  • Re: Collegamento immagini esterne in sottocartelle

    alex66 ha scritto:


    Se devi intervenire sul nome foto, puoi benissimo spostare la stessa nella cartella da te scelta,
    oppure rinomini la foto --> tasto destro mouse --> proprietà --> percorso, lo selezioni e copi e lo incolli nel campo della procedura di inserimento collegamento ipertestuale.
    Certo, non è agevole come procedura, ma ti risolve il problema e anzi, non avresti neanche bisogno della maschera di visualizzazione, perché access ti apre l'immagine con il software predefinito in windows per l'estensione del file immagine.
    Ce l'ho avuto anche io lo stesso problema nel mio ultimo progetto in fase di lavorazione.
    Ma se qualcuno ha una soluzione migliore...

    Ciao.

    Alex66
    La soluzione che proponi è interessante e ti ringrazio. Però non si presta alla mia applicazione, la quale nasce per rendere più veloci e user friendly tutta una serie di procedure. Già è un po' una rottura copiare una stringa e andare a rinominare un file, copiare-incollare anche un percorso nel database lo escludo a priori.

    Qui ipotizzo mi serva un algoritmo di ricerca.
  • Re: Collegamento immagini esterne in sottocartelle

    E qua non ti posso essere d'aiuto.

    Ma se qualcuno ha questa soluzione, la applico anch'io!!!

    Alla prossima.

    Alex66
  • Re: Collegamento immagini esterne in sottocartelle

    Scusa, c'ho ripensato .

    E se invece di creare un collegamento ipertestuale crei un altro campo "txtPercorso" che ti copi dalla barra di explorer?

    E' molto più veloce e a questo punto il codice sarà questo:
    
    Private Sub cmdImmagine_Click()
    Dim Foto As String
    Foto = Me.txtPercorso.Value & Me.txtNomeFoto.Value & ".jpg"
    DoCmd.OpenForm "frmImmagine"
    Forms!frmImmagine.Immagine.Picture = Foto
    End Sub
    
    Fammi sapere.

    Ciao.

    Alex66
  • Re: Collegamento immagini esterne in sottocartelle

    Candy91 ha scritto:


    Buongiorno a tutti, è da un po' che non scrivo nel forum.

    Premetto che uso Access da meno di un anno e con il VBA so fare cose abbastanza di base.

    PROBLEMA:
    Ho una maschera continua, dove per ogni record, nella casella di testo "txtNomeFoto" è presente appunto il nome di una foto.

    Con un pulsante, apro una maschera popup "frmImmagine" in cui mi deve caricare la foto esterna in formato jpg, a partire da suddetto nome.

    Nella maschera frmImmagine ho creato un elemento immagine vuoto.

    Il codice è il seguente:
    Private Sub cmdImmagine_Click()
    Dim Foto As String
    Foto = Me.txtNomeFoto.Value & ".jpg"
    DoCmd.OpenForm "frmImmagine"
    Forms!frmImmagine.Immagine.Picture = "C:\FOTO\2019\" & Foto
    End Sub
    
    Funzionerebbe benissimo, se non fosse che le foto sono salvate in varie sottocartelle rispetto al percorso che ho specificato nel codice. Le sottocartelle hanno pure nomi non prevedibili.

    Esiste un modo per far si che Access vada a cercare la foto in tutte le sottocartelle presenti nel percorso C:\FOTO\2019\?


    Grazie in anticipo..
    Aspetto tecnico... che è più per chi fa attenzione a logiche di programmazione razionale... ovvero di non disperfdere codice in giro...!
    Il codice di gestione di Oggetti esterni andrebbe limitato alla chiamata... sicchè non è buona cosa andare a modificare l'immagine di una maschera appena aperta dalla maschera che la apre... sia per concetto tecnico, ma anche perchè se dovessi aprire quella maschera in modalità "MODALE=acDialog", ovviamente non funzionerebbe... quindi perchè scrivere codice che deve essere condizionato da come apri gli oggetti...?
    Giusto per capire:
    Private Sub cmdImmagine_Click()
    DoCmd.OpenForm "frmImmagine", , , , , , Me.txtNomeFoto.Value & ".jpg"
    End Sub
    
    Poi su Load della Maschera:
    
    Private Sub Form_Load()
       If Len(Me.OpenArgs)>0 then
           If fFileExist(Me.OpenArgs) Then Me.Immagine.Picture = Me.OpenArgs
       End If
    End Sub 
    La funzione per testare se il File Esiste la si mette in un Modulo Pubblic
    
    Function fFileExist(ByVal fName As String) As Boolean
    'Returns TRUE if the provided name points to an existing file.
    'Returns FALSE if not existing, or if it's a folder
        On Error Resume Next
        fFileExist= ((GetAttr(fName) And vbDirectory) <> vbDirectory)
    End Function
    Detto questo, che però è ordine mentale e metodo di programmazione, sbagli a gestire la fase di inserimento delle Immagini.
    Il Sistema non è intelligenete ed hai 2 Opzioni:
    1) Memorizzi il Percorso Completo
    2) Memorizzi il Nome, ma Obblighi al Path fisso
    NOn hai altre Opzioni.

    Tuttavia credo che il tuo errore sia proprio a monte, ovvero nella parte di SELEZIONE immagine... che non spieghi... ma di certo se ben gestita non richiede alcuna "pippa" di modifica assurda...
    Ti suggerisco di orientare la tua logica su questo versante.
  • Re: Collegamento immagini esterne in sottocartelle

    @Alex ha scritto:


    Detto questo, che però è ordine mentale e metodo di programmazione, sbagli a gestire la fase di inserimento delle Immagini.
    Il Sistema non è intelligenete ed hai 2 Opzioni:
    1) Memorizzi il Percorso Completo
    2) Memorizzi il Nome, ma Obblighi al Path fisso
    NOn hai altre Opzioni.

    Tuttavia credo che il tuo errore sia proprio a monte, ovvero nella parte di SELEZIONE immagine... che non spieghi... ma di certo se ben gestita non richiede alcuna "pippa" di modifica assurda...
    Ti suggerisco di orientare la tua logica su questo versante.
    Ti ringrazio per le dritte, preziose come sempre.

    Ho ben capito che sono alle strette.

    Giusto per chiarezza riguardo la selezione immagine, io inserisco un record tramite maschera, con diverse informazioni. La maschera mi restituisce una stringa in una casella di testo (txtNomeFoto), basandosi su quello che ho inserito.

    Nel frattempo viene scattata una foto, che automaticamente viene memorizzata nel percorso C:\FOTO\2019\ + cartella data odierna, esempio C:\FOTO\2019\06-02-2020\ e rinominata con il contenuto di txtNomeFoto.

    Ora molto semplicemente basta fare in modo che venga memorizzata nel database la data di inserimento del record, che coincide sempre con la data dello scatto. Li poi con il codice trovo il sistema di fargli risalire al percorso esatto in cui si trova la foto.

    Il problema è nato perché sto lavorando su bel numero di record che sono stati memorizzati senza la data di inserimento (importati da Excel tra l'altro).

    Non so se mi sono spiegato.
  • Re: Collegamento immagini esterne in sottocartelle

    alex66 ha scritto:


    Scusa, c'ho ripensato .

    E se invece di creare un collegamento ipertestuale crei un altro campo "txtPercorso" che ti copi dalla barra di explorer?

    E' molto più veloce e a questo punto il codice sarà questo:
    
    Private Sub cmdImmagine_Click()
    Dim Foto As String
    Foto = Me.txtPercorso.Value & Me.txtNomeFoto.Value & ".jpg"
    DoCmd.OpenForm "frmImmagine"
    Forms!frmImmagine.Immagine.Picture = Foto
    End Sub
    
    Fammi sapere.

    Ciao.

    Alex66
    No ma lo escludo a priori. Come dicevo la mia applicazione nasce proprio per rendere più immediate delle procedure che attualmente vengono gestite in modo deludente su Excel. Non ha senso che costringa l'utente a copiare e incollare il percorso del file, dato che idealmente ci sono da inserire anche un centinaio di record al giorno.

    Tuttavia questa funzione "preview" delle foto ha un'importanza marginale, è solo per perfezionare il tutto.
Devi accedere o registrarti per scrivere nel forum
9 risposte