Ho la necessità di salvare delle immagini su database (SQLServer). Il campo del db è di tipo Image.
Dalla mia applicazione l'utente seleziona un file immagine che viene caricato in una ImageBox. Una volta fatta questa operazione il file per me non deve più esistere, infatti vorrei che quando l'utente clicca su SALVA, il programma vada a leggere l'immagine contenuta nell'imagebox, la scomponga e la salvi su db.
Attualmente per gestire il salvataggio su db utilizzo questo sistema:
- Memorizzo il Path del file selezionato dall'utente
- Apro un recordset avente come origine dati la tabella in cui salvare il file
- Setto una variabile di tipo ADODB.Field col campo Image della tabella
- Apro il file in modalità Binary Access Read
- Scompongo il file inserendo ogni pezzetto in un array di tipo Byte
- Assegno l'array al campo ADODB.Field su citato
- Eseguo l'Update sul recordset

Di seguito vi riporto il codice:
codice:
' Carica l'immagine nell'Image box
Private Sub cmdLoadFoto_Click()
    
    cd.ShowOpen
    strPath = cd.FileName
    ' carica l'immagine
    imgFoto.Picture = LoadPicture(strPath)
    
End Sub

' Salva sul db l'immagine contenuta nell'Image box
Private Sub cmdSaveFoto_Click()

    Dim strSQL As String
    Dim adoRS As New ADODB.Recordset
    Dim adoField As ADODB.Field
    Dim bytArray() As Byte
    
    strSQL = "SELECT IDFoto, Foto FROM tbImmagini"
    adoRS.Open strSQL, adoConn, 1, 3
    
    adoRS.AddNew
    
    Set adoField = adoRS.Fields.Item("Foto")
    
    ' Inserisce l'immagine selezionata nel database
    bytArray = fnLeggiFile
    ' Inserisce il file nel nuovo record
    adoField = bytArray()
    
    imgFoto.Picture

    adoRS.Update
    
    Set adoRS = Nothing
    
End Sub

' Legge l'immagine inserendola nell'array
Private Function fnLeggiFile() As Byte()

    Dim intIndiceFile As Integer, lngDimensioneFile As Long
    ' Array che contine il file scomposto il byte
    Dim bytImmagine() As Byte
    Dim i As Long
    
    ' Cerca il primo indice di file disponibile nel sistema
    intIndiceFile = FreeFile
    ' Apre il file in lettura
    Open strPath For Binary Access Read As intIndiceFile
    
    ' Calcola la dimensione del file
    lngDimensioneFile = LOF(intIndiceFile)
    ' Ridimensiona l'array
    ReDim bytImmagine(lngDimensioneFile)
    ' Cicla il file leggendolo un byte per volta
    For i = 0 To lngDimensioneFile
        Get intIndiceFile, , bytImmagine(i)
    Next

    ' Chiude il file
    Close intIndiceFile
    ' Restituisce l'array
    fnLeggiFile = bytImmagine

End Function
Tutto questo funziona alla perfezione, ma non è esattamente ciò che vuole il mio capo.
Ovvero, sarebbe preferibile riuscire a scomporre direttamente l'immagine contenuta nell'imagebox e non andare a suddividere il file fisicamente presente su HD, perchè l'utente potrebbe cancellare il file prima di salvarlo.

Voi avete suggerimenti da darmi?
Grazie a tutti