Errore UPDATE, DELETE

1nostromo

Nuovo Utente
25 Ago 2014
29
0
0
Boun giorno , ho costruito un DataBase Access tramite codice vb2010, formato da 4 tabelle 1^-tblClienti - ID_Clienti Key, 2^tblLocalita - Localita Key, 3^tblPrestazioni - ID_Prestazioni key , 4^tblFattura - ID_Fattura key, relazionate uno-molti tra loro. Ho creato il primo form di inserimento,modifica e cacellazione righe database.Non ho problemi con il seguente codice di inserimento dati in tblLocalita:

On Error GoTo Handle
Archivio.Open() 'Apri connessine

'Inserisci dati tacellaCliente e stabiliamo una connessione con il DataBase.mdb
Dim cmInseriscitblClienti As New OleDb.OleDbCommand("INSERT INTO [tblLocalita]([Localita],[CAP]) VALUES(?,?)", Archivio)

'Stabiliamo i parapetri Clienti
cmInseriscitblClienti.Parameters.Add(New OleDb.OleDbParameter("@Localita", OleDb.OleDbType.LongVarWChar))
cmInseriscitblClienti.Parameters.Add(New OleDb.OleDbParameter("@CAP", OleDb.OleDbType.LongVarWChar))

'Stabiliamo i VALORI dei parametri Clienti
cmInseriscitblClienti.Parameters(0).Value = txtLocalita.Text
cmInseriscitblClienti.Parameters(1).Value = txtCAP.Text

'Esegui la query database.mdb
cmInseriscitblClienti.ExecuteNonQuery()
Handle:

I problemi sorgono con il CODICE MODIFICA come di seguito riportato:
On Error GoTo Handle
Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@Localita,CAP=@CAP WHERE (ID_Localita=@ID_Localita)", Archivio)

'Stabiliamo i parapetri Clienti
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@Localita", OleDb.OleDbType.LongVarWChar))
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@CAP", OleDb.OleDbType.LongVarWChar))

' Stabiliamo i VALORI dei parametri Clienti
cmModifica.Parameters(0).Value = txtLocalita.Text
cmModifica.Parameters(1).Value = txtCAP.Text
cmModifica.ExecuteNonQuery()

cmModifica.ExecuteNonQuery()
DANDOMI IL SEGUENTE ERRORE:
(Nessun valore specificato per alcuni parametri necessari.)

Se invece modifico il codice in questo modo,

On Error GoTo Handle
Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@Localita,CAP=@CAP WHERE (Localita=@Localita)", Archivio)
'Stabiliamo i parapetri Clienti
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@Localita", OleDb.OleDbType.LongVarWChar))
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@CAP", OleDb.OleDbType.LongVarWChar))
' Stabiliamo i VALORI dei parametri Clienti
cmModifica.Parameters(0).Value = txtLocalita.Text
cmModifica.Parameters(1).Value = txtCAP.Text
cmModifica.ExecuteNonQuery()

cmModifica.ExecuteNonQuery()

Handle:
mi permette di modificare dolo il campo CAP

===================================================================================
Ho provato anche così cambiando completamente metodo e codice e anche quì mi da questo errore; Evidenziando in giallo la query -da.Fill(ds, "tblLocalita")- Tipi di dati non corrispondenti nell'espressione criteri. Il codice è il seguente

Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click


'On Error GoTo Handle
ds = New DataSet
da = New OleDbDataAdapter("UPDATE tblLocalita SET Localita='" & txtLocalita.Text & "',CAP='" & txtCAP.Text & "'WHERE ID_Localita='" & txtID.Text & "'", Archivio)
da.Fill(ds, "tblLocalita")
Call ShowData()
'Handle:
End Sub

Anche qui dove sbaglio? !!!!!!!! Ho il sospetto a questo punto che l'errore sia nel BataBase? mah! Se è così fosse ti prego si visionare la costruzione dell' ArchivioPrestazioni.mdb:

Private Sub cmdCreaTabelle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCreaTabelle.Click, lblCreaTabelle.Click

'costruzione Tabelle
Dim Costruisci_tblClienti As New OleDb.OleDbCommand("CREATE TABLE [tblClienti] ([ID_InfoClienti] AutoIncrement NOT NULL,[Cognome] TEXT(25) NULL, [Nome] TEXT(25) NULL, [Data_di_Nascita] TEXT(10) NULL, [Via] TEXT(30) NULL, [ID_Localita] INT NULL, [N_Telefono_Fisso] TEXT(10) NULL, [Telefono_Mobile] TEXT(10) NULL,[Partita_IVA] TEXT(10) NULL, [Codice_Fiscale] TEXT(16) NULL, [Patologia] TEXT(225) NULL,PRIMARY KEY (ID_InfoClienti))", Archivio) 'Crea una nuova variabile com per inviare un comando SQL al database archivio per creare una tabella Docenti con i campi Nome, Cognome e Luogo di nascita al suo interno. archivio indica che va inviato alla connessione aperta in archivio

Dim Costruisci_tblLocalita As New OleDb.OleDbCommand("CREATE TABLE [tblLocalita] ([ID_Localita] AutoIncrement NOT NULL,[Localita] TEXT(30) NULL,[CAP] TEXT(5) NULL, PRIMARY KEY(ID_Localita))", Archivio) 'Crea una nuova variabile com per inviare un comando SQL al database archivio per creare una tabella Docenti con i campi Nome, Cognome e Luogo di nascita al suo interno. archivio indica che va inviato alla connessione aperta in archivio

Dim Costruisci_tblPrestazioni As New OleDb.OleDbCommand("CREATE TABLE [tblPrestazioni] ([ID_Prestazioni] AutoIncrement NOT NULL, [ID_InfoClienti] INT NULL, [Prestazioni] TEXT(255) NULL,[Costo] TEXT(10) NULL,[Data_Inizio_Prestazione] TEXT(10) NULL, [Ora] TEXT(5) NULL,[Data_Fine_Prestazione] TEXT(10) NULL, PRIMARY KEY (ID_Prestazioni))", Archivio)
Dim Costruisci_tblFattura As New OleDb.OleDbCommand("CREATE TABLE [tblFattura] ([ID_Fattura] AutoIncrement NOT NULL, [ID_Prestazioni] INT NULL, [N_Fattura] TEXT(10) NULL, [Data_Fattura] DATE NULL, [Bollo] TEXT(5) NULL, [Totale_Lordo] TEXT(10) NULL,[Totale_Netto] TEXT(10) NULL, PRIMARY KEY (ID_Fattura))", Archivio)

Archivio.Open() 'Apri la connessione con il databa

Costruisci_tblClienti.ExecuteNonQuery() 'Esegui comando SQL
Costruisci_tblLocalita.ExecuteNonQuery() 'Esegui comando SQL
Costruisci_tblPrestazioni.ExecuteNonQuery() 'Esegui comando SQL
Costruisci_tblFattura.ExecuteNonQuery() 'Esegui comando SQL

Archivio.Close() 'Chiudi la connessione con il database

End Sub

Grazie per la disponibilità, non posso dirti "un caffè pagato" perchè sicuramente non abiti nella mia stessa città, comunque grazie di cuore.
 
Ciao,
'
Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@Localita,CAP=@CAP WHERE (ID_Localita=@ID_Localita)", Archivio)

Stabiliamo i parapetri Clienti
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@Localita", OleDb.OleDbType.LongVarWChar))
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@CAP", OleDb.OleDbType.LongVarWChar))

' Stabiliamo i VALORI dei parametri Clienti
cmModifica.Parameters(0).Value = txtLocalita.Text
cmModifica.Parameters(1).Value = txtCAP.Text

Hai valorizzato 2 parametri su 3:
@Localita
@CAP
@ID_Localita <------ da valorizzare

Prova a verificare
Michele

A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!
 
Ciao,


Hai valorizzato 2 parametri su 3:
@Localita
@CAP
@ID_Localita <------ da valorizzare

Prova a verificare
Michele

A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!

Buona sera. Sono grato per la solerte diponibilità offertami. Come sicuramente avra capito non
sono un professionista ma un autodidatta avvicinatosi alla programmazione più per necessità
che per passione, la passione è venuta dopo. Ho messo subito in atto il suo consiglio ma purtroppo
non ha avuto l'effetto sperato, anzi, come ho interpretato quanto a scritto, non mi dà nemmeno errore
ne tanto meno modifica i campi [Localita],[CAP], sicuramente sono in errore io. La prego cortesemente
di visionare il codice sottoriportato eventualmente di correggere dove necessita.


Private Sub btnModifica_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModifica.Click, lblModifica.Click

Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@Localita,CAP=@CAP WHERE (ID_Localita=@ID_Localita)", Archivio)

'Stabiliamo i parapetri Clienti
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@ID_Localita", OleDb.OleDbType.LongVarWChar))
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@Localita", OleDb.OleDbType.LongVarWChar))
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@CAP", OleDb.OleDbType.LongVarWChar))

' Stabiliamo i VALORI dei parametri Clienti
cmModifica.Parameters(0).Value = lblID.Text
cmModifica.Parameters(1).Value = txtLocalita.Text
cmModifica.Parameters(2).Value = txtCAP.Text

cmModifica.ExecuteNonQuery()

Faccio presente che ID_Localita è AutoIncrement NOT NULL

=============Approfitto della sua disponibilità===========================

Per quanto riguarda la seconda possibilità di codice quì sotto? cosa mi dice, perchè mi dà errore?

ds = New DataSet
da = New OleDbDataAdapter("UPDATE tblLocalita SET Localita='" & txtLocalita.Text & "',CAP='" & txtCAP.Text & "'WHERE ID_Localita='" & txtID.Text & "'", Archivio)
da.Fill(ds, "tblLocalita")

Call ShowData()

Grazie di nuovo :byebye:.
 
Buonasera,
purtroppo come ha detto lei non va in errore la subroutine con la modifica da me consigliata, quindi di conseguenza è difficile capire qual è il problema. Posso consigliarle:
- di inserire i comandi di error handling (try, Catch, Exception) per capire qual è l'errore SQL:
Codice:
        Dim connetionString As String
        Dim cnn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim sql As String

        connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Your mdb filename;"
        sql = "Your SQL Statement Here"

        cnn = New OleDbConnection(connetionString)
        Try
            cnn.Open()
            cmd = New OleDbCommand(sql, cnn)
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            cnn.Close()
            MsgBox(" ExecuteNonQuery in OleDbConnection executed !!")
        Catch ex As Exception
            MsgBox("Can not open connection ! " & ex.Message)
        End Try
- mi invia il progetto e provo a fare il debug per capire dov'è il problema

Ciao
Michele

A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!
 
Buonasera,
purtroppo come ha detto lei non va in errore la subroutine con la modifica da me consigliata, quindi di conseguenza è difficile capire qual è il problema. Posso consigliarle:
- di inserire i comandi di error handling (try, Catch, Exception) per capire qual è l'errore SQL:
Codice:
        Dim connetionString As String
        Dim cnn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim sql As String

        connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Your mdb filename;"
        sql = "Your SQL Statement Here"

        cnn = New OleDbConnection(connetionString)
        Try
            cnn.Open()
            cmd = New OleDbCommand(sql, cnn)
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            cnn.Close()
            MsgBox(" ExecuteNonQuery in OleDbConnection executed !!")
        Catch ex As Exception
            MsgBox("Can not open connection ! " & ex.Message)
        End Try
- mi invia il progetto e provo a fare il debug per capire dov'è il problema

Ciao
Michele

A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!

Il suo aiuto non solo è provvidenziale ma molto apprezzato. Prima o poi in una programmazione è inevitabile imbattersi nei DataBase, per questa ragione, se non Le reca troppo disturbo, Le mando due bozze di programma con metodologie di INSERT, UPDATE e DELETE diversi per acquisire qualche nozione in più, per me ora mai è diventata una questione di principio. Purtroppo per motivi di spazzio dell'allegato, anche smagrendolo il programma non rieso a incollarglieli con questo post, pertanto Le invio file in formato word, sperando che per Lei sia lo stesso.
Grazie di nuovo per il disturbo :byebye:.
 

Allegati

Ultima modifica:
Signor Michele, Le ho spedito il giorno 31/08/2010 con posta privata all'indirizzo e-mail da Lei cortesemente indicato "nella sua posta elettrica e non qui" due bozze di progetti riguardanti il mio noto problema di programmazione vb2010 in modo che abbia la maggiore visione di cui Lei a bisogno. Sicuramente non l'avrà aperti per paura di file contaminati, anche se non ci conosciamo la voglio tranquillizare che gli allegati sono puliti e per rassicurarla ulteriormente Le dichiaro i miei dati personali sono: COLONNA Oscar via L.Fantappiè 7 VITERBO di età 60 anni. Grazie per la sua cortesia a presto.
 
caro nostromo,
attenzione alla lunghezza dei campi, per esempio
[Partita_IVA] TEXT(10) NULL
è decisamente errata ...
si accerti che i valori che passa nelle variabili, siano di lunghezza consona alla definizione dei campi nel database
saluti
Marino
 
forse
Codice:
    da = New OleDbDataAdapter("UPDATE tblLocalita SET Localita='" & txtLocalita.Text & "'CAP='" & txtCAP.Text & " WHERE (ID_Localita= " & txtID.Text & "')", Archivio)
andrebbe scritta con virgole e apici al loro posto
Codice:
    da = New OleDbDataAdapter("UPDATE tblLocalita SET Localita='" & txtLocalita.Text & "',CAP='" & txtCAP.Text & "' WHERE (ID_Localita='" & txtID.Text & "')", Archivio)
ma non ho il software necessario a provare il codice, mi fermo qui ...
Marino
 
Errori ne database

caro nostromo,
attenzione alla lunghezza dei campi, per esempio
[Partita_IVA] TEXT(10) NULL
è decisamente errata ...
si accerti che i valori che passa nelle variabili, siano di lunghezza consona alla definizione dei campi nel database
saluti
Marino

Grazie del consiglio.
 
Buona notte, avevo sritto il codice UPDATE nella maniera da lei consigliata poi avevo provato nel modo in cui lo ha visto, comunque mi da lo stesso errore, credevo che comunque scrivessi Update in un modo o nell'altro era la stessa cosa, evidenziando in giallo il codice qui affianco da.Fill(ds, "tblLocalita")
e con la scritta "Tipi di dati non corrispondenti nell'espressione criterio.". Grazie del consiglio ho provveduto a ripristinane come lei mia ha consigliato, evidentemente vi sono più di un errore che sommati mi da questo problema. Questa occasione mi da modo di studiare con più attenzione il linguaggi SQL partendo dall'inizio ad edempio dall'algebra di Boole applicata in programmazione, chissà che partendo dall'inizio piano, piano e con i vostri preziosi e pazienti consigli rieso a venirne a capo? ora mai, come ho già detto, è una questione di principio. Grazie e buona notte. Oscar
 
non è solo questione di studio ma una questione di "ordine"
Oscar, lei ha definito tutte le variabili di tipo testo (text) anche quelle che servono per calcoli numerici

nella sua update (mi è sfuggito) esegue una ricerca su un valore intero, passando un campo testo
il sistema le restituisce sicuramente errore, provi togliendo gli apici attorno alla variabile dopo la clausola "where"

le suggerisco di valutare prima la corretta definizione delle variabili, rivedendo il suo codice
saluti
Marino
 
Ciao Oscar,
per la versione dove utilizzi questo comando per effettuare l'update:

Codice:
        da = New OleDbDataAdapter("UPDATE tblLocalita SET Localita='" & txtLocalita.Text & "'CAP='" & txtCAP.Text & " WHERE (ID_Localita= " & txtID.Text & "')", Archivio)

come detto da Marino, ci sono degli apici ' posizionati non correttamente. La giusta collocazione è questa:

Codice:
        da = New OleDbDataAdapter("UPDATE tblLocalita SET Localita='" & txtLocalita.Text & "', CAP='" & txtCAP.Text & "' WHERE (ID_Localita= " & txtID.Text & ")", Archivio)



Invece per la soluzione dove utilizzi il metodo "cmModifica.Parameters.Add", ci sono un paio di anomalie:
1. Non valorizzi correttamente il parametro @IDLocalita in lettura --> il campo deve essere recuperato dalla tabella e non settato manualmente con indice + 1
2. Quando effettui la valorizzazione dei parametri, devi effettuarli nella stessa sequenza indicata nel comando di update
Es:
Codice:
        Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@Localita, CAP=@CAP WHERE (ID_Localita=@IDLocalita)", Archivio)

Assegnazione ERRATA:
Codice:
        cmModifica.Parameters.Add("@IDLocalita", OleDb.OleDbType.BigInt).Value = lblID.Text
        cmModifica.Parameters.Add("@Localita", OleDb.OleDbType.VarChar).Value = txtLocalita.Text
        cmModifica.Parameters.Add("@CAP", OleDb.OleDbType.VarChar).Value = txtCAP.Text

Assegnazione CORRETTA:
Codice:
        cmModifica.Parameters.Add("@Localita", OleDb.OleDbType.VarChar).Value = txtLocalita.Text
        cmModifica.Parameters.Add("@CAP", OleDb.OleDbType.VarChar).Value = txtCAP.Text
        cmModifica.Parameters.Add("@IDLocalita", OleDb.OleDbType.BigInt).Value = lblID.Text


Se non mi sono spiegato bene, chiedi pure
Ciao
Michele


A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!
 
Buon giorno, ha pienamente ragione in tutto, il caso 1) mi sono confuso BigInt con VarChar, nel caso 2) effettivamente non lo sapevo.
La cosa che mi lascia perplesso è, perchè nell'INSERT INTO il programma inserisce i dati correttamente con il codice seguente:
cmInseriscitblClienti.Parameters.Add(New OleDb.OleDbParameter("@Localita", OleDb.OleDbType.LongVarWChar))
cmInseriscitblClienti.Parameters.Add(New OleDb.OleDbParameter("@CAP", OleDb.OleDbType.LongVarWChar))
e con il seguente no? Naturalmente non considerando la diversa cronologia.
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@IDLocalita", OleDb.OleDbType.LongVarWChar))
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@Localita", OleDb.OleDbType.LongVarWChar))
cmModifica.Parameters.Add(New OleDb.OleDbParameter("@CAP", OleDb.OleDbType.LongVarWChar)) ???????

Ho sostituito Il codice con il suo, lo lascerò così corretto, però ho provato, il progetto non mi da ne errore ne sustituisce i dati.
Grazie per la sua gentilezza.
Oscar
 
Ciao Oscar,
hai i tuoi progetti modificati nella tua mail già corretti. Ho effettuato dei test di update e le modifiche risultano applicate al db. Nota bene, nel secondo caso i problemi erano 2, sequenza parametri e idlocalità
Prova ad utilizzare i progetti che ti ho inviato via mail e fammi sapere

Michele
 
Ciao Oscar,
hai i tuoi progetti modificati nella tua mail già corretti. Ho effettuato dei test di update e le modifiche risultano applicate al db. Nota bene, nel secondo caso i problemi erano 2, sequenza parametri e idlocalità
Prova ad utilizzare i progetti che ti ho inviato via mail e fammi sapere

Michele

Se vuoi provarli, ricordati di modificare il path contenuto nel OleDb.OleDbConnection con il path dove è presente il tuo db
Codice:
OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Ten\My\HolidaySoft\Prestazioni Infermieri\ArchivioPrestazioInfermieristico\ArchivioPrestazioInfermieristico\ArchivioPrestazioni.mdb;Jet OLEDB:Engine Type=5")
 
Errore Update,Delete

Ciao Oscar,
hai i tuoi progetti modificati nella tua mail già corretti. Ho effettuato dei test di update e le modifiche risultano applicate al db. Nota bene, nel secondo caso i problemi erano 2, sequenza parametri e idlocalità
Prova ad utilizzare i progetti che ti ho inviato via mail e fammi sapere

Michele

Tutto chiaro, grazie molto.
 

Discussioni simili