Discussione chiusa
Visualizzazione dei risultati da 1 a 2 su 2

Discussione: query di update prodotti/dettaglio prodotti con datagridview

  1. #1
    SanzWeb non è in linea Novello
    Post
    23

    query di update prodotti/dettaglio prodotti con datagridview

    Gentili colleghi del forum, sono ad un punto morto del software che sto implementando nel senso che nella mia testa gira una soluzione che è complicata e prima di mettermi a sviluppare righe e righe di codice volevo consultarmi per verificare che non ci fosse una soluzione più facile al mio problema.

    Lo scenario è del tipo tabella prodotti e dettaglio prodotti.

    Il dettaglio prodotti è costituito da una datagridview dove l'utente decide di mettere o no le righe del dettaglio prodotto.

    L'inserimento dei dati con INSERT non mi ha dato problemi, ma le noie cominciano quando devo aggiornare (update) un prodotto aggiungendo o togliendo righe alla datagrid view.

    L'utente vuole quindi modificare un dato prodotto e carica nella schermato il codice relativo. Supponiamo voglia aggiungere una o più righe di dettaglio oltre e a quelle già presenti, quando vado a fare l'update della tabella, le righe che ho aggiunto alla GRID non vengono viste come Update, e vengono ignorate...cosa posso fare senza diventare matto per aggiungere le righe nel database, fermo restando quelle che già c'erano?

    aggiungo una foto della schermata per visualizzare il caso e posto il codice qui di seguito:



    codice:
    updquerydettaglio = "update tedakdb.dettagli_prodotti set idprodotti=@iddettaglio, idarticolo=@idart, codbarart=@codbarart, qtausata=@qtausata WHERE idprodotti = '" & idprodotto & "' AND "
    
    Using myconn As New MySqlConnection(stringaConn)
                    myconn.Open()
    
                    Dim cmdmodprod As New MySqlCommand(updqueryProd, myconn)
    
                    With cmdmodprod.Parameters
    
                        .Add("@codbar", MySqlDbType.VarChar)
                        .Add("@desc", MySqlDbType.VarChar)
                        .Add("@fotopath", MySqlDbType.VarChar)
                        .Add("@prezzo", MySqlDbType.Decimal)
                        .Add("@categoria", MySqlDbType.VarChar)
                        .Add("@sottocat", MySqlDbType.VarChar)
                        .Add("@qta", MySqlDbType.Int16)
    
                    End With
    
                    Try
    
                        With cmdmodprod
                            .Parameters("@codbar").Value = txtcodbar.Text
                            .Parameters("@desc").Value = txtdesc.Text
                            .Parameters("@fotopath").Value = nuovopathFoto
                            .Parameters("@prezzo").Value = prezzo
                            .Parameters("@categoria").Value = lblcategoria.Text
                            .Parameters("@sottocat").Value = lblsottocat.Text
                            .Parameters("@qta").Value = CInt(txtqta.Text)
    
                            recordmodificati = .ExecuteNonQuery()
    
                        End With
    
                    Catch ex As Exception
                        MessageBox.Show(ex.Message, "Salvataggio Prodotti Finiti")
    
                    End Try
                End Using
    
                If recordmodificati = 0 Then
                    MessageBox.Show("Dati non aggiornati")
                    Exit Sub
                Else
    
                    '*********SALVATAGGIO AGGIORNAMENTO GRIGLIA DETTAGLIO ARTICOLI ********************
    
                    If dgdettaglioArt.RowCount > 0 Then
    
                        Dim cmddettaglioprod As New MySqlCommand
    
                        Try
    
                            Using myconndeteils As New MySqlConnection(stringaConn)
    
                                myconndeteils.Open()
                                cmddettaglioprod = New MySqlCommand(updquerydettaglio, myconndeteils)
    
                                'parametri dettaglio prodotti
                                With cmddettaglioprod.Parameters
    
                                    .Add("@iddettaglio", MySqlDbType.Int16)
                                    .Add("@idart", MySqlDbType.Int16)
                                    .Add("@codbarart", MySqlDbType.VarChar)
                                    .Add("@qtausata", MySqlDbType.Int16)
                                End With
    
                                For Each row As DataGridViewRow In dgdettaglioArt.Rows
    
                                    With cmddettaglioprod
                                        .Parameters("@iddettaglio").Value = idprodotto
                                        .Parameters("@idart").Value = row.Cells(1).Value
                                        .Parameters("@codbarart").Value = row.Cells(2).Value
                                        .Parameters("@qtausata").Value = row.Cells(7).Value
    
                                        .ExecuteNonQuery()
    
                                    End With
    
                                Next
    
                                myconndeteils.Close()
                            End Using
                            MessageBox.Show("Dettaglio prodotto aggiornati correttamente")
    
                        Catch ex As Exception
                            MessageBox.Show(ex.Message, "Errore inserimento ")
                            Exit Sub
    
                        End Try
    
                    Else
                        ' non fa niente se non ci sono righe nella griglia di dettaglio
    
                    End If
    
                End If

    Dovrei trovare un sistema per verificare se ci sono righe aggiunte in seguito a quelle già presenti e fare un insert prima di quelle, poi ritornare e fare l'update??
    Ho pensato anche ad un update con inner join ma poi mi si ripresenta il problema delle righe eventualemente aggiunte alla datagrid view.


    Spero di non essere stato troppo contorto, ma sono ad un punto morto davvero.

    grazie per le vostre dritte che riuscirete a darmi

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,158
    Blogs
    5
    Ti avevo già avvisato per il crossposting senza successo. Thread chiuso
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

Discussione chiusa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi