Gentili signori buongiorno.
Ho un problema di questo tipo relativo alla gestione di una picturbox in fase di modifica di una tabella articoli:
codbar - coddisegno - categoria - descrizione - fotopath - prezzo - qta
Inserisco nella tabella articoli un nuovo articolo con i campi sopra elencati (tra cui il cod bar che sarà anche il nome della immagine salvata in una cartella apposita) e la foto dell'articolo. Sin qui tutto bene.
Poi prevedo un pulsante di modifica dell'articolo nel caso l'utente si sia sbagliato ad inserire qualche dato, e qui cominciano i problemi per la gestione dell'immagine nel senso che ho immaginato questi scenari quando vengono ricaricati i dati dal database per la modifica:
1) immagine caricata nella pctbox - l'utente la lascia inalterata - esiste nella cartella con lo stesso nome
2) l'immagine è caricata, l'utente la cambia perché la vuole modificare - esiste nella cartella con lo stesso nome
3) l'utente svuota la picture box e quindi non c'è immagine e non viene salvato nessun percorso nel database - l'immagine come file continua però ad esistere nella cartella.
Ho, secondo me, creato un codice troppo arzigogolato, ma la sostanza è che quando vado a salvare, a seconda dei vari scenari che mi sono creato, nel momento in cui cerco di cancellare l'immagine, mi dice che non riesce perché il file è in uso presso un altro processo, oppure il file esiste già e non riesce a trasportare la nuova immagine con il codice a barre che rimane lo stesso, pur essendo uscito dai vari Using e chiuso le connessioni e pulito pcfoto.image
Ho messo dei messagebox qua e la per mio uso e consumo per verificare ai vari stadi che valore prendevano le variabili.
Esisterà un modo più pulito e mi sono incasinato la vita per niente...chiedo un vostro aiuto.
grazie per chi vorrà darmi una propria opinione.
If ImModify = True Then '(se sono in fase di modifica articolo allora: )
Dim updqueryart As String
If (imgcaricata = True) And (immagine_e_uguale = True) And (File.Exists(Oldpath)) Then
MessageBox.Show("img è caricata: "& imgcaricata & ""& "immagine_e_uguale alla caricata: "& immagine_e_uguale & ""& File.Exists(Oldpath))
picNewPathcli = String.Concat(targetDir1, "\", appoggiocodbar, ".jpg")
ElseIf (imgcaricata = True) And (immagine_e_uguale = False) And (File.Exists(Oldpath)) Then
picNewPathcli = String.Concat(targetDir1, "\", appoggiocodbar, ".jpg")
MessageBox.Show("valore iniziale: "& picNewPathcli)
MessageBox.Show(" siamo nel caso che img non è caricata: "& imgcaricata)
picNewPathcli = Nothing
End If
prezzo = Convert.ToDecimal(txtprezzo.Text)
Else
prezzo = 0
End If
Using myconn As New MySqlConnection(stringaConn)
cmdmodart.Parameters.Add("@coddisegno", MySqlDbType.VarChar).Value = txtrifdisegno.Text
cmdmodart.Parameters.Add("@categoria", MySqlDbType.VarChar).Value = cbcategoria.Text
cmdmodart.Parameters.Add("@descrizione", MySqlDbType.VarChar).Value = txtdescrizione.Text
cmdmodart.Parameters.Add("@fotopath", MySqlDbType.VarChar).Value = picNewPathcli
cmdmodart.Parameters.Add("@prezzo", MySqlDbType.Decimal).Value = prezzo
cmdmodart.Parameters.Add("@qta", MySqlDbType.Int16).Value = CInt(txtqtapresente.Text)
Try
myconn.Open()
cmdmodart.ExecuteNonQuery()
myconn.Close()
FotoPct.Image = Nothing
FotoPct.Image.Dispose()
Catch ex As Exception
End Using
puliscicampi()
disabilita()
File.Delete(pathattuale)
My.Computer.FileSystem.CopyFile(pathattuale, picNewPathcli)