Caricare un allegato

di il
9 risposte

Caricare un allegato

Salva a tutti.
Ho il seguente codice:

Dim rs as recordset
Dim vbo As Object
variabile as string   
    

            stringaSQL = "SELECT A0050_SAGOME_FERRO.[ID_sagoma], A0050_SAGOME_FERRO.[Sagoma] FROM 0050_SAGOME_FERRO WHERE (A0050_SAGOME_FERRO.[ID_sagoma])='" & variabile & "';"
            Set rs = DB.OpenRecordset(stringaSQL)
            vbo = rs(1)
            Forms!A0060_Visualizzazione_un_solo_materiale.Allegato47 = vbo
dove la tabella A0050_SAGOME_FERRO ha un campo testo ([ID_SAGOMA] e un campo allegato [Sagoma]. Nel campo sagoma c'è un immagine in .png
vorrei caricare nell'allegato47 che è nel form A0060_Visualizzazione_un_solo_materiale l'immagine del campo [sagoma].
Ho provato in diversi modi ma non riesco. L'errore è che non riconosce l'oggetto.
Potete indicarmi l'errore? Grazie

9 Risposte

  • Re: Caricare un allegato

    Https://support.microsoft.com/it-it/office/allegare-file-ed-elementi-grafici-ai-record-nel-database-d40a09ad-a753-4a14-9161-7f15baad6dbd
  • Re: Caricare un allegato

    GRAZIE OREGON.
    Ho inserito Sagoma.FileData nella maschera e ho risolto in parte.
    Purtroppo ora l'immagine resta sempre visualizzata. La visualizzazione la devo legare al valore di un altro campo, e questo non mi riesce.
    Infatti non tutte le maschere hanno l'immagine e quindi devo renderla non visibile talvolta.
    Per far questo devo agire sulla proprietà visible del controllo ma non mi riesce.

    Grazie
  • Re: Caricare un allegato

    Cosa hai fatto con la proprietà Visible? Spiegati
  • Re: Caricare un allegato

    La proprietà visible forse ora funziona, manca il cambio della immagine.
    
    If IsNull(rs(8)) = False Then
                    variabile = rs(8)
                    Forms!A0060_Visualizzazione_un_solo_materiale!ID_Sagoma.Value = variabile
                    Forms!A0060_Visualizzazione_un_solo_materiale!Sagoma.visible = True
                    
                    rs.Close
                    stringaSQL = "SELECT A0050_SAGOME_FERRO.[ID_sagoma], A0050_SAGOME_FERRO.[Sagoma] FROM A0050_SAGOME_FERRO WHERE (A0050_SAGOME_FERRO.[ID_sagoma])='" & variabile & "';"
                    Set rs = DB.OpenRecordset(stringaSQL)
                    Forms!A0060_Visualizzazione_un_solo_materiale!Sagoma = rs(1)
                    Forms!A0060_Visualizzazione_un_solo_materiale!Sagoma.visible = True
                    Me.Refresh
                          
                rs.Close
                
                Else
                    Forms!A0060_Visualizzazione_un_solo_materiale!Sagoma.visible = False
                End If
        
    Il campo ID_Sagoma della tabella materiali è in relazione con il campo ID_Sagoma della tabella A0050_SAGOME_FERRO.

    Con
     stringaSQL = "SELECT A0050_SAGOME_FERRO.[ID_sagoma], A0050_SAGOME_FERRO.[Sagoma] FROM  A0050_SAGOME_FERRO WHERE (A0050_SAGOME_FERRO.[ID_sagoma])='" & variabile & "';"
    Set rs = DB.OpenRecordset(stringaSQL)
     
    selezione il record con l'immagine giusta che è nell'allegato nel campo [Sagoma] della tabella A0050_SAGOME_FERRO.
    Ora devo caricare nel
    Forms!A0060_Visualizzazione_un_solo_materiale!Sagoma=rs(1) 
    il campo Sagoma selezionato.
    Ma mi da errore
    Non riesco a capire dove sbaglio
  • Re: Caricare un allegato

    In un recordset rs tipo Recordset2 ho gli allegati che sono delel foto.
    Vorrei legare una di queste foto a un controllo immagine che ho in una maschera.
    Non sono riuscito a scrivere l'istruzione corretta cioè come legare rs("FileData"), rs("FileName") e rs("FileType") al controllo immagine.
    Cortesemente potete indicarmi quali sono le istruzioni in vba per legare l'immagine che si chiama immagine0 a uno degli allegati che sono in rs?
    Grazie
  • Re: Caricare un allegato

    Io ho questa procedura che vale per i report. Per le maschere mi pare che si operi in maniera analoga, ma pare funzioni solo con "maschera singola". Te la copio/incollo così come me la sono memorizzata io. Spero di non essere fuori tema.

    - Caricare immagini nel Corpo
    In un report si vuole mostrare per ogni record una immagine corrispondente. Considerato che le immagini allegate appesantiscono il database, occorre predisporre nella tabella sottostante un campo NomeFoto che indichi il nome completo dell'immagine o il path (da capire se assoluto o relativo).
    Nel corpo del report aggiungere:
    - un controllo Immagine che chiamerò ImmagineFoto. La procedura guidata chiederà di associare una qualsiasi da scegliere. Poi si può anche eliminare il valore corrispondente nella proprietà Immagine.
    - una casella di testo non associata che chiamerò FotoNote
    In questo esempio viene preso in considerazione un path relativo. Ho previsto sia che NomeFoto sia vuoto, sia che abbia un nome incoerente, sia uno valido. In ogni caso bisogna stabilire se ImmagineFoto sia visibile o no, in ogni caso bisogna scrivere qualcosa in FotoNote.
    Per caricare la foto in ImmagineFoto si usa la proprietà Picture. Il codice VBA va scritto in Corpo, evento "Su formattazione".
    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
    Dim strPath As String
    If IsNull(Me!NomeFoto) Then
        Me!ImmagineFoto.Visible = False
        Me!FotoNote = "Nessuna immagine specificata"
    Else
        strPath = Application.CurrentProject.Path
        strPath = strPath & "\Foto"
        strPath = strPath & "\" & Me!DettagliDDT!NomeFoto
        If Len(Dir(strPath)) = 0 Then
            Me!ImmagineFoto.Visible = False
            Me!FotoNote = "Immagine non trovata"
        Else
            Me!ImmagineFoto.Visible = True
            Me!ImmagineFoto.Picture = strPath
            Me!FotoNote = vbNullString
        End If
    End If
    End Sub
  • Re: Caricare un allegato

    Nella versione Access>2013 mi pare il controllo immagine può essere Associato direttamente al campo "PATH" senza codice aggiunto.
  • Re: Caricare un allegato

    Grazie a Osvaldo ed ALex.
    Purtroppo al solito voglio correre prima di imparare a camminare.
    Come avete capito sto studiando il campo allegati.
    Ho una tabella (di studio) con due campi, uno testo breve chiamato codice_materiale e uno allegato chiamato sagoma.
    Ho tre record che si chiamano SAGOMA_A, SAGOMA_B, SAGOMA_C dove nel rispettivo campo allegato ho tre foto, due
    foto e una foto.
    Con questa routine leggo il nome di tutti gli allegati e il tipo facendolo partire da un controllo pulsante
    
    Private Sub Comando2_Click()
    
        Dim db As DAO.Database
        Dim rst As DAO.Recordset2
        Dim rs As DAO.Recordset2
        Dim fld As DAO.Field2
    
        Set db = CurrentDb
        Set rst = dbs.OpenRecordset("A0050_SAGOME_FERRO")
        Set fld = rst("Sagoma")
    
        Do While Not rst.EOF
    
        Set rs = fld.Value
    
        'Print all attachments in the field
        Do While Not rs.EOF
    
            Debug.Print , rs("FileType"), rsA("FileName")
            rs.MoveNext
        Loop
        
        rst.MoveNext
        Loop
    
        rst.Close
        db.Close
        Set fld = Nothing
        Set rst = Nothing
        Set dbs = Nothing
    End Sub
    
    Vorrei legare queste foto a una immagine a seconda di un valore controllo.

    Purtroppo non ho capito come legare il codice che mi hai scritto all'allegato.
    Provero' a inserire le immagini in una tabella e proverò a caricarle da lì

    Grazie.
  • Re: Caricare un allegato

    Leggi qui
    https://docs.microsoft.com/it-it/office/troubleshoot/access/display-images-using-custom-function
    per avere un quadro completo di come gestire il tutto.
    Il codice che ti ho proposto è una mia personalizzazione molto semplificata...e fa riferimento al report. Per la maschera, quel link suggerisce di creare una Public Function che fa tutto per la maschera, poi vari eventi della maschera chiamano (Call) tutti la stessa Function. Per quello che ne sapevo io, ciò funziona solo con "maschera singola"...pare che da Access 2016 sia possibile anche con "maschera continua"... ma non so nulla al riguardo, non ho mai approfondito.
    In ogni caso non devi avere un campo allegato in tabella, il database si appesantisce e a lungo andare diventa difficile/impossibile da aprire. In tabella devi avere un campo di tipo "testo breve" dove:
    - indichi il path di dove andare a pescare l'immagine da una cartella che predisponi appositamente
    - in alternativa al campo Path, puoi usare il campo codice_materiale, ma poi, via VBA devi essere in grado di ricostruire il path corrispondente.
    Importantissimo: accanto al database devi avere la cartella con tutti i file immagine.
Devi accedere o registrarti per scrivere nel forum
9 risposte