Questo sito utilizza cookie tecnici e di terze parti. Continuando la navigazione sul nostro sito accetti l'uso dei cookie. Per saperne di più leggi l'informativa sui cookie.   


sostituire immagine prodotto in picturebox ma con nome uguale
Ultimo messaggio: 17 apr 2019 15:24 di sanzweb. 3 Risposte.
Stampa gradevole
Solo gli utenti registrati possono rispondere ad una discussione.
Avatar
sanzweb
Messaggi: 87
Iscritto dal: 12 ott 2015 17:40
Utente
Utente

16 apr 2019 08:55

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.

 '************ Salvataggio nel caso di modifica articolo **************

        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
                MessageBox.Show(" siamo nel caso che img è caricata: " & imgcaricata & " " & "immagine_non è_uguale alla caricata: " & immagine_e_uguale & " " & "ed il vecchio file esiste" & File.Exists(Oldpath))

                picNewPathcli = String.Concat(targetDir1, "\", appoggiocodbar, ".jpg")
                MessageBox.Show("valore iniziale: " & picNewPathcli)
            ElseIf (imgcaricata = False) Then
                MessageBox.Show(" siamo nel caso che img non è caricata: " & imgcaricata)
                picNewPathcli = Nothing
            End If
            If txtprezzo.Text <> "" Then
                prezzo = Convert.ToDecimal(txtprezzo.Text)
            Else
                prezzo = 0
            End If
            updqueryart = "update tedakdb.articoli set codbar = @codbar,  coddisegno = @coddisegno, categoria=@categoria, Descrizione=@descrizione, fotopath=@fotopath, Prezzo=@prezzo, qta=@qta WHERE idarticolo = '" & idarticolo & "' "

            Using myconn As New MySqlConnection(stringaConn)
                Dim cmdmodart As New MySqlCommand(updqueryart, myconn)
                cmdmodart.Parameters.Add("@codbar", MySqlDbType.VarChar).Value = txtcodbar.Text
                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()
                    MessageBox.Show("Articolo aggiornato correttamente!", "Anagrafica Articoli")
                    myconn.Close()
                    FotoPct.Image = Nothing
                    FotoPct.Image.Dispose()
                Catch ex As Exception
                End Try
            End Using
            ImModify = False
            puliscicampi()
            disabilita()
            MessageBox.Show("valore finale: " & picNewPathcli)
            File.Delete(pathattuale)
            My.Computer.FileSystem.CopyFile(pathattuale, picNewPathcli)

    Avatar
    patel
    Messaggi: 324
    Iscritto dal: 04 feb 2017 19:43
    Utente
    Utente

    16 apr 2019 09:45
    Hai provato a lanciare l'eseguibile con VS chiuso ?
      Avatar
      orione1976
      Messaggi: 125
      Iscritto dal: 11 ott 2017 09:08
      Utente
      Utente

      16 apr 2019 20:55

      ciao io avrei risolto con qualche controllo e basta, ma è una mia logica ovviamente, ognuno usa la sua.

       

      avrei fatto così:

      Avrei predisposto un immagine universale da caricare in caso non fosse stato selezionato nulla o nel caso venga rimossa. Così eviti strani errori, alle brutte hai caricato quella di default. e così per il campo vuoto hai risolto.

       

      quando la vai ad inserire mi sembra tu non abbia problemi ed in fase di modifica se non la toccano sei ok

       

      rimane il problema in caso di modifica... io farei così:

      fai un controllo, se esiste una foto con lo stesso nome la fai eliminare e poi inserisci la nuova o in alternativa metti la sovrascrittura su True e quindi hai risolto.... se invece la tolgono proprio carica quella di default come detto sopra e con il comando DeleteFile se esiste con il nome del codice a barre la fai eliminare...

       

      Che ne pensi?

        Avatar
        sanzweb
        Messaggi: 87
        Iscritto dal: 12 ott 2015 17:40
        Utente
        Utente

        17 apr 2019 15:24

        Ciao Orione e grazie per le dritte...

        si effettivamente con l'immagine di default potrei evitare strane eccezioni che potrebbero sorgere in fase di modifica visto che quando ci mettono mano i clienti non si sa come riescono a tirare il collo al codice finché non lo fanno piantare...

        vedo come snellire ulteriormente...

        grazie intanto

          Solo gli utenti registrati possono rispondere ad una discussione.