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.