Comando UPDATE SQL per Database Access Non funzionante

di il
16 risposte

Comando UPDATE SQL per Database Access Non funzionante

Ciao a tutti,
sono un autodidatta che nel tempo libero appassionato di programmazione, sto cercando di creare un gestionale aziendale in vb.net da presentare un domani alla mia azienda dove lavoro attualmente. però non riesco a fare un semplice Update in una tabella del database Access, almeno riesco ma il nuovo dato si cambia anche sui tutti i record presenti nella tabella e così non va bene… Vi lascio il codice del form, se qualcuno mi può aiutare vi sarei grato.
Grazie in anticipo per il supporto!
Imports MySql.Data.MySqlClient
Imports System.Data.SqlClient
Imports Microsoft.VisualBasic.ApplicationServices
Imports Microsoft.Win32
Imports System.Data.OleDb
Imports System.IO
Imports Microsoft.Office.Interop
Imports System
Imports System.Collections
Public Class MODIFICAREFERENZA
    Public cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=P:\TEST\GESTIONALE 3.0\DATABASE.mdb")
    Public pippo As OleDb.OleDbDataReader
    Public dr As OleDb.OleDbDataReader

Private Sub BTNMODIFICA_Click(sender As Object, e As EventArgs) Handles BTNMODIFICA.Click
        Dim cm_ref As New OleDb.OleDbCommand("UPDATE REFERENZE SET Reparto=@Reparto,Sotto_Reparto=@Sotto_Reparto,Tipo=@Tipo,Sotto_tipo=@Sotto_tipo,EAN13=@EAN13,Nome_Referenza=@Nome_Referenza,Descrizioni=@Descrizioni,Marca=@Marca,Fornitore=@Fornitore,Giorno_Rap=@Giorno_Rap,Contatti_Fornitori=@Fornitori,Prezzo_vendita=@Prezzo_vendita,Sconto_Piva=@Sconto_Piva,Sconto_Artigiano=@Sconto_Artigiano,Unita_misura_ref=@Unita_misura_ref,Prezzo_acquisto=@Prezzo_acquisto,qta=@qta,Gamma=@Gamma,Stato_Prodotto=@Stato_Prodotto,Referenza_Modificata_Da=@Referenza_Modificata_Da WHERE Codice=@lavatrice")
        cm_ref.Parameters.AddWithValue("@lavatrice", REFTEXT.Text)
        cm_ref.Parameters.AddWithValue("@Reparto", REPARTOCOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Sotto_Reparto", SOTTOREPARTOCOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Tipo", TIPOCOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Sotto_tipo", SOTTOTIPOCOMBO.Text)
        cm_ref.Parameters.AddWithValue("@EAN13", EAN13COMBO.Text)
        cm_ref.Parameters.AddWithValue("@Nome_Referenza", NOMEREFTEXT.Text)
        cm_ref.Parameters.AddWithValue("@Descrizioni", DESCRIZIONEREFTEXT.Text)
        cm_ref.Parameters.AddWithValue("@Marca", MARCATEXT.Text)
        cm_ref.Parameters.AddWithValue("@Fornitore", FORNITORICOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Contatti_Fornitori", CONTATTIFORNITORITEXT.Text)
        cm_ref.Parameters.AddWithValue("@Prezzo_vendita", PREZZOVENDITATEXT.Text)
        cm_ref.Parameters.AddWithValue("@Sconto_Piva", SCONTOPIVACOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Sconto_Artigiano", SCONTOARTCOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Unita_misura_ref", UNITAPEZZOCOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Prezzo_acquisto", PREZZOACQUISTOTEXT.Text)
        cm_ref.Parameters.AddWithValue("@Giorno_Rap", SETTIMANAGIORNI.Text)
        cm_ref.Parameters.AddWithValue("@qta", qta.Text)
        cm_ref.Parameters.AddWithValue("@Gamma", GAMMAREFCOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Stato_Prodotto", STATOREFCOMBO.Text)
        cm_ref.Parameters.AddWithValue("@Referenza_Modificata_Da", REFMODIFICADBTXT.Text)
        cn.Open()
        cm_ref.Connection = cn
        dr = cm_ref.ExecuteReader
        MsgBox("I dati della referenza sono stati correttamente modificati nella Tabella Referenze del Database.", MsgBoxStyle.Information, "Success!")
        cn.Close()
    End Sub

16 Risposte

  • Re: Comando UPDATE SQL per Database Access Non funzionante

    lucacesa99 ha scritto:


    Ciao a tutti,
    Ciao,

    il codice va postato tra gli appositi tag ( vedi pulsante </> nella barra in alto )
    altrimenti è difficile e scomodo da leggere
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Non passi il parametro della WHERE Codice @lavatrice

    P.S. usa I rag code per scrivere il codice del programma nel forum
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Gli OleDBParameter vogliono il "?" come placeholder, non il parametro denominato, e gli AddWithValue vanno eseguiti nell'ordine presente nel predicato SQL.
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Aggiungo anche che ExecuteReader non ha molto senso con un comando UPDATE
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Ciao ragazzi,
    prima di tutto grazie per le risposte ma il problema che non sono riuscito a farlo funzionare anche con le vostre dritte... cosa potrebbe essere? il comanda WHERE come deve essere utilizzato?
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Cioè? Cosa hai fatto? Hai impostato il parametro del codice per la where?
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    oregon ha scritto:


    Cioè? Cosa hai fatto? Hai impostato il parametro del codice per la where?
    sinceramente il comando where non ho capito come va impostato... ho messo ? come placeholder e gli AddWithValue nell'ordine corretto del predicato e tolto ExcuteReader ma lo stesso non funziona...
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Dato che non ci capiamo metti il nuovo codice nel forum usando i tag code
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Private Sub BTNMODIFICA_Click(sender As Object, e As EventArgs) Handles BTNMODIFICA.Click
            Dim cm_ref As New OleDb.OleDbCommand("UPDATE REFERENZE SET Codice=?Codice,Reparto=?Reparto,Sotto_Reparto=?Sotto_Reparto,Tipo=?Tipo,Sotto_tipo=?Sotto_tipo,EAN13=?EAN13,Nome_Referenza=?Nome_Referenza,Descrizioni=?Descrizioni,Marca=?Marca,Fornitore=?Fornitore,Giorno_Rap=?Giorno_Rap,Contatti_Fornitori=?Contatti_Fornitori,Prezzo_vendita=?Prezzo_vendita,Sconto_Piva=?Sconto_Piva,Sconto_Artigiano=?Sconto_Artigiano,Unita_misura_ref=?Unita_misura_ref,Prezzo_acquisto=?Prezzo_acquisto,qta=?qta,Gamma=?Gamma,Stato_Prodotto=?Stato_Prodotto,Referenza_Inserita_Da=?Referenza_Inserita_Da WHERE Codice=?lavatrice")
            cm_ref.Parameters.AddWithValue("?lavatrice", TEXTBOXCERCACOD.Text)
            cm_ref.Parameters.AddWithValue("?Codice", REFTEXT.Text)
            cm_ref.Parameters.AddWithValue("?Reparto", REPARTOCOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Sotto_Reparto", SOTTOREPARTOCOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Tipo", TIPOCOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Sotto_tipo", SOTTOTIPOCOMBO.Text)
            cm_ref.Parameters.AddWithValue("?EAN13", EAN13COMBO.Text)
            cm_ref.Parameters.AddWithValue("?Nome_Referenza", NOMEREFTEXT.Text)
            cm_ref.Parameters.AddWithValue("?Descrizioni", DESCRIZIONEREFTEXT.Text)
            cm_ref.Parameters.AddWithValue("?Marca", MARCATEXT.Text)
            cm_ref.Parameters.AddWithValue("?Fortnitore", FORNITORICOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Giorno_Rap", SETTIMANAGIORNI.Text)
            cm_ref.Parameters.AddWithValue("?Contatti_Fornitori", CONTATTIFORNITORITEXT.Text)
            cm_ref.Parameters.AddWithValue("?Prezzo_vendita", PREZZOVENDITATEXT.Text)
            cm_ref.Parameters.AddWithValue("?Sconto_Piva", SCONTOPIVACOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Sconto_Artigiano", SCONTOARTCOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Unita_misura_ref", UNITAPEZZOCOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Prezzo_acquisto", PREZZOACQUISTOTEXT.Text)
            cm_ref.Parameters.AddWithValue("?qta", qta.Text)
            cm_ref.Parameters.AddWithValue("?Gamma", GAMMAREFCOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Stato_Prodotto", STATOREFCOMBO.Text)
            cm_ref.Parameters.AddWithValue("?Referenza_Inserita_Da", LABELUSER.Text)
            cn.Open()
            cm_ref.Connection = cn
            MsgBox("La scheda del fornitore è stata correttamente modificata dalla tabella Fornitori del database", MsgBoxStyle.Information, "Success!")
            cn.Close()
        End Sub

    oregon ha scritto:


    Dato che non ci capiamo metti il nuovo codice nel forum usando i tag code
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Non devi fare l'Update del Codice dato che ti serve solo per cercare il record da aggiornare. E devi usare il ? senza il nome

    Vedi esempio

    https://www.codeproject.com/Questions/745699/Unable-to-insert-data-using-Parameters-AddWithValu
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Buona sera scusate se mi intrometto nel discorso ma capita lo stesso errore a me...o meglio funziona quando modifico sia il nome che la scelta del grado del giocatore quando invece voglio modificare la combo della lega mi cambia tutti i record e non riesco a capire dove sta il problema...vi posto il codice
    Private Sub btnModifica_Click(sender As Object, e As EventArgs) Handles btnModifica.Click
            Try
                conn.Open()
                Dim cmd As New OleDb.OleDbCommand("Update Giocatori SET Utenti=?,Grado=? where GironiLega=?", conn)
    
                cmd.Parameters.Clear()
                cmd.CommandType = CommandType.Text
                cmd.Parameters.AddWithValue("?", txtNome.Text)
                cmd.Parameters.AddWithValue("?", ComboGrado.Text)
                cmd.Parameters.AddWithValue("?", ComboLega.Text)
    
                cmd.ExecuteNonQuery()
    
                    MessageBox.Show("Utente Aggiornato", "Dettagli Squadra", MessageBoxButtons.OK, MessageBoxIcon.Information)
                
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            conn.Close()
            LeggiDataGrid()
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    In quella update puoi modificare solo i campi Utenti (perché plurale?) e grado. Il campo gironilega è nella where quindi serve solo per il filtro.

    PS dovresti usare un thread differente da questo anche se ti sembra simile
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Grazie oregon della risposta e scusami se ho scritto qui era quasi simile e ho pensato che potevo accodarmi cmq non capiterà più...ho usato il plurale senza pensarci cmq grazie alla tua risposta ho risolto aggiungendoci ID...buona serata
  • Re: Comando UPDATE SQL per Database Access Non funzionante

    Ciao io avrei fatto in questo modo
    
    Dim Modifica As String
    Modifica = "UPDATE TabelladeltuoDatabase SET valore1=?,valore2=?,valore3=? Where valore4 =?"
            Dim cmd As OleDbCommand = New OleDbCommand(Modifica, myConnection)
            cmd.Parameters.AddWithValue("valore1", Textbox1.Text)
            cmd.Parameters.AddWithValue("valore2", Textbox2.Text)
            cmd.Parameters.AddWithValue("valore3", Textbox3.Text)
            cmd.Parameters.AddWithValue("valore4", Textbox4.Text)
            Try
                cmd.ExecuteNonQuery()
                myConnection.Close()
                Catch ex As Exception
                MsgBox(ex.Message)
                End Try
                
    ovviamente valore1 etc... li conosci tu e anche dove deve prendere il riferimento, io ho messo Textbox ma vedi tu.
    Detto questo, tenere il codice con un certo ordine direi che è sempre utile, quando cresce ha i suoi vantaggi, però anche se avessi fatto così:
    Dim Modifica As String
            Modifica = "UPDATE TabelladeltuoDatabase SET [valore1]=@valore1,[valore2]=@valore2,[valore3]=@valore3 Where [valore4]=@valore4"
            Dim cmd As OleDbCommand = New OleDbCommand(Modifica, myConnection)
            cmd.Parameters.AddWithValue("@valore1", Textbox1.Text)
            cmd.Parameters.AddWithValue("@valore2", Textbox2.Text)
            cmd.Parameters.AddWithValue("@valore3", Textbox3.Text)
            cmd.Parameters.AddWithValue("@valore4", Textbox4.Text)
                    Try
                cmd.ExecuteNonQuery()
                myConnection.Close()
                Catch ex As Exception
                MsgBox(ex.Message)
                End Try
                
    Avrebbe funzionato ugualmente anche se non avessi rispettato l'ordine... ma diciamo che è molto piu utile seguire una linea comune.
Devi accedere o registrarti per scrivere nel forum
16 risposte