Erore di sintassi (operatore mancante) nell'espressione della query 'C...

sabato 23 agosto 2014 - 11.24

1noostromo Profilo | Newbie

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 mi permette di modificare dolo il campo CAP
P E R C H E', MI POTETE AIUTARE?
, grazie per l'aiuto.

alx_81 Profilo | Guru

>Boun giorno ,
ciao

>DANDOMI IL SEGUENTE ERRORE: (Nessun valore specificato per alcuni parametri necessari.)
> P E R C H E', MI POTETE AIUTARE?
Prova a sostituire (nel primo comando che ti dà errore) i @params con dei ?

>, grazie per l'aiuto.
di nulla!

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

1noostromo Profilo | Newbie

Grazie per la solerzia della riposta. Leggendo su internet e su SQL Server 2000, mi era venuto il dubbio di sostiuire con @params,ho riprovato ma senza risultato, la modifica l'ho capita così, vedi se è giusta
Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@Localita,CAP=@CAP WHERE (ID_Localita=@params)", 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()
Errore:
OledbExeption non è stata gestita:
Nessun valore specificato per alcuni parametri necessari.
Ho anche provato così
Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@params ,CAP=@params WHERE (ID_Localita=@params)", Archivio)
Nulla di fatto!

Tempo a dietro avevo provato anche così:
Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@p,CAP=@pWHERE (ID_Localita=@p)", Archivio)
anche qui nulla di fatto.
------------------------------------------------------------------------------------------
Per maggiore chiarezza ti scrivo tutto il codice btnModifica:
Private Sub btnModifica_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModifica.Click, lblModifica.Click

' Preparazione del salvataggio dei dati:
' vengono cancellati eventuali spazi vuoti all'inizio o alla fine del testo nei TextBox e
' i dati vengono trascritti in lettere maiuscole:
txtLocalita.Text = txtLocalita.Text.Trim.ToUpper
txtCAP.Text = txtCAP.Text.Trim


' Messaggio di conferma dei dati, prima del loro salvataggio:
Dim TestoDiConferma As String = "Localita:" & txtLocalita.Text & vbCrLf
TestoDiConferma += " C.A.P.: " & txtCAP.Text.ToString

If MsgBox(TestoDiConferma, MessageBoxButtons.YesNo + MessageBoxIcon.Question, "CONFERMI QUESTI DATI?") = Windows.Forms.DialogResult.No Then
' Se l'utente non conferma i dati, esci della procedura di salvataggio:
Exit Sub
End If

'On Error GoTo Handle
Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@Localita,CAP=@CAP WHERE (ID_Localita=@params)", 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
'Handle:
Archivio.Close()
End sub
===============================================================================================
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

' Preparazione del salvataggio dei dati:
' vengono cancellati eventuali spazi vuoti all'inizio o alla fine del testo nei TextBox e
' i dati vengono trascritti in lettere maiuscole:
txtLocalita.Text = txtLocalita.Text.Trim.ToUpper
txtCAP.Text = txtCAP.Text.Trim


' Messaggio di conferma dei dati, prima del loro salvataggio:
Dim TestoDiConferma As String = "Localita:" & txtLocalita.Text & vbCrLf
TestoDiConferma += " C.A.P.: " & txtCAP.Text.ToString

If MsgBox(TestoDiConferma, MessageBoxButtons.YesNo + MessageBoxIcon.Question, "CONFERMI QUESTI DATI?") = Windows.Forms.DialogResult.No Then
' Se l'utente non conferma i dati, esci della procedura di salvataggio:
Exit Sub
End If

'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.

alx_81 Profilo | Guru

Forse non mi sono spiegato..
Intendevo di mettere al posto dei tuoi parametri il carattere "?"
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

1noostromo Profilo | Newbie

Il primo tentativo che ho fatto è stato questo; Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=@Localita,CAP=@CAP WHERE (ID_Localita=?)", Archivio), perchè gli inserimenti avvengono con VALUES(?,?) questo è Il codice INSERT-------------->Dim cmInseriscitblClienti As New OleDb.OleDbCommand("INSERT INTO [tblLocalita]([Localita],[CAP]) VALUES(?,?)", Archivio).

PoI provato anche così--------------- Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=?,CAP=? WHERE (ID_Localita=@ID_Localita)", Archivio),

anche così-------------->Dim cmModifica As New OleDbCommand("UPDATE tblLocalita SET Localita=?,CAP=? WHERE (ID_Localita=?)", Archivio)

Mi da il solito errore, evidenziando in giallo "cmModifica.ExecuteNonQuery()" e mi dice " OleDBException non è stato gestito ---- Nessun valore specificato per alcuni parametri necessari."
I valori me li cambia solo così;
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()

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

cmModifica1.ExecuteNonQuery()
E' un'assurdità,no? mi chiedo, quando dovrò costruire un form con più valori da inserire, per ogni Text.Box di modifica devo scrivere tutto sto pò pò di codice? Non può essere, no?
Grazie per l'aiuto e il disturbo.


alx_81 Profilo | Guru

>E' un'assurdità,no? mi chiedo, quando dovrò costruire un form
>con più valori da inserire, per ogni Text.Box di modifica devo
>scrivere tutto sto pò pò di codice? Non può essere, no?
fai una cosa, prova a controllare la stringa SQL che viene creata e cerca di lanciare direttamente quella per vedere se hai errori di sintassi o qualcosa di simile..
perchè non mi viene molto. In aggiunta, fai un progetto VS con solo quella update e un database access legato. Cerchiamo di capire.

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5