Funzione UPDATE

sabato 30 aprile 2011 - 19.33
Tag Elenco Tags  VB.NET  |  Visual Studio 2008  |  Access (.mdb)

Zagor60 Profilo | Junior Member

Salve,

dove sbaglio, nella funzione UPDATE, premetto che nell'inserimento i record vengono salvati , mentre non riesco ad aggiornare il DB:

Dim cn As New OleDbConnection
cn = New OleDbConnection
cn = SqlHelper.ConnessioneDatabase

Dim cmdins As New OleDbCommand("INSERT INTO tabella("campo1,campo2)VALUE(valore1,valore2)",cn)
cn.Open()
parametri.....
cmdins.ExecuteNonQuery()
cn.Close()
.....

nell' UPDATE

Dim cn As New OleDbConnection
cn = New OleDbConnection
cn = SqlHelper.ConnessioneDatabase

Dim cmdins As New OleDbCommand("UPDATE tabella SET ("Nome=txtnome.text,cognome=txtcognome.text)WHERE (Nome=txtnome.text,cognome=txtcognome.text)",cn)
cn.Open()
parametri.....
cmdins.ExecuteNonQuery()
cn.Close()
Grazie
saluto
..

martinez Profilo | Senior Member

>Salve,

Ciao!
>
>dove sbaglio, nella funzione UPDATE,

... cut ...

>nell' UPDATE

>Dim cmdins As New OleDbCommand("UPDATE tabella SET ("campo1=valore1,campo2=valore2)",cn)

Così a prima "acchitto" credo che ti manchi la clausola where ... per "updatare" una sola riga devi indicare quella che vuoi aggiornare ...

UPDATE tabella SET Campo1 = @Campo1, Campo2 = @Campo2 WHERE (IDTabella = @IDTabella)

A mio parere è sempre opportuno usare delle stored procedure piuttosto che comandi testuali ... Ma è solo un consiglio!

>Grazie
Di nulla

>saluto
>..
Ciao

Zagor60 Profilo | Junior Member

Ciao again,

niente non funziona, l'errore è questo:
"errore di sintassi nellistruzione UPDATE

martinez Profilo | Senior Member

>Ciao again,
>
Ciao :)

Che DB Usi? Access o SQL ?

potresti controllare e postare con esattezza parametri e chiave di tabella come pure i campi da aggiornare ?

>niente non funziona, l'errore è questo:
>"errore di sintassi nellistruzione UPDATE

Sembrerebbe che sbagli nel formulare la query

:)

Zagor60 Profilo | Junior Member

Ciao,
di seguito quanto richiesto

Che DB Usi? Access o SQL ?
Veramente avevo fatto il programma utilizzando sql server e tutto funzionava alla perfezione usando anche le stored proc ecc.. poi per incompatibilità dei pc in azienda sono docuto passare ad access. Quindi uso Access.

potresti controllare e postare con esattezza parametri e chiave di tabella come pure i campi da aggiornare ?
Try
If Not DatiValidi() Then
Exit Sub
End If
If txtnuovo.Text = "Nuovo" Then

Dim cn As New OleDbConnection
cn = New OleDbConnection
cn = SqlHelper.ConnessioneDatabase

Dim cmdins As New OleDbCommand("INSERT INTO tabclienti("nome,cognome)VALUE(txtnome.text,txtcognome.text",cn)
cn.Open()
cmdins.Parameters.AddWithValue("nome", txtnome.Text)
cmdins.Parameters.AddWithValue("cognome", txtcognome.Text)

cmdins.ExecuteNonQuery()
cn.Close()
(fin quì tutto funziona)
Else

Dim cn As New OleDbConnection
cn = New OleDbConnection
cn = SqlHelper.ConnessioneDatabase

Dim cmdins As New OleDbCommand("UPDATE tabclienti SET "Nome=txtnome.text,cognome=txtcognome.text WHERE Nome=txtnome.text AND cognome=txtcognome.text)",cn)
cn.Open()
cmdins.Parameters.AddWithValue("nome", txtnome.Text)
cmdins.Parameters.AddWithValue("cognome", txtcognome.Text)
cmdins.ExecuteNonQuery()
cn.Close()
end if

>niente non funziona, l'errore è questo:
>"errore di sintassi nellistruzione UPDATE

Sembrerebbe che sbagli nel formulare la query

ps. potrei fare il tutto con meno righe di programma, ma quando vado a salvare mi esce l'errore:
"previsto il valore 1 per la chiave che si sta indicizzando.Ricevuto valore 2"
non so come risolvere quanto sopra

HO risolto con l'esempio come sopra cioè togliendo le parentesi.
un ulteriore domanda : coma faccio in fase di modifica , e dopo il salvataggio a rimanere sullo stesso record.
Mi succede che dopo una modifica, salvo e il cursore va sul primo record della tabella.

martinez Profilo | Senior Member

>Ciao,

Ciao purtroppo non riesco ad aiutarti molto in quanto non ho grandi esperienze con ACCESS ma in generale posso dirti che:

1) ACCESS si aspetta l'inserimento dei paramtri nella stessa sequenza dei campi del DB al contrario di SQL con il quale puoi specificare i paramtri in qualsivoglia ordine;
2) Dagli esempi da te pubblicati sembrerebbe che la tua tabella non ha un campo chiave primaria? Possibile ? se così fosse ti consiglio di crearlo immediatamente perché prima o poi avrai problemi senza dubbio, lavorando con l'esempio citato in caso di omonimia tra nome e cognome nella tabella a quale record dovresti fare riferimento ???
3) ACCESS usa il [?] per identificare i paramentri al posto del [@] usato da SQL
4) Se il codice che utilizzi è realmente quello scritto ti consiglio di stare attento ad sqlinectjon ... corri dei seri pericoli :)

per concludere ribadisco che la procedura corretta per Update è quella citata nel post precedente

UPDATE tabella SET Campo1 = @Campo1, Campo2 = @Campo2 WHERE (IDTabella = @IDTabella)

>Dim cmdins As New OleDbCommand("UPDATE tabclienti SET "Nome=txtnome.text,cognome=txtcognome.text WHERE Nome=txtnome.text AND
>cognome=txtcognome.text)",cn)

Questa riga ha dei problemi ... così facendo indichi di fare UPDATE dei campi con riferimento (WHERE) dove campo1 e campo2 siano uguali ai nuovi valori (parametri se vogliamo) delle textbox ... invece nel where devi indicare i vecchi valori di campo1 e campo2 per aggiornarli ...

spero di essere stato chiaro ...
ribadisco il concetto importantissimo di avere un campo chiave univoco per ogni tabella al quale poter fare riferimento per tutte le operazioni sui record ...

A presto
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5