VB 2005 - Grosso problema con db access

martedì 28 ottobre 2008 - 22.27

DomA Profilo | Expert

Ciao a tutti,
vi scrivo perchè ho un problema che mi tormenta da qualche giorno. Usando questa routine, che serve ad inserire dati in una tabella di un db access, mi dà "Errore di sintassi nell'istruzione INSERT INTO". L'errore dovrebbe essere dovuto al fatto che non si possiedono le credenziali di accesso.
Vi posto il codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

La cosa strana è che nelle altre form il codice postato non mi dà alcun problema.
Se può essere d'aiuto ho notato che il file DatiP.mdb è come se rimanesse aperto (vi è una copia con un lucchetto) anche dopo aver interrotto il debug.

Qualcuno mi può svelare l'arcano segreto.
Grazie a tutti


Domenico
Domenico

alexmed Profilo | Guru

Ciao
La prima cosa che mi viene in mente è che magari hai un valore string che contiene un'apice (es.: Loc = Villanova d'Asti)
Se ci passi l'errore che ti dà magari ci orientiamo meglio

Ciao

Teech Profilo | Expert

Prova ad usare i parametri e non a fare il concatenamento di stringhe...
Oltre a degli indubbi vantaggi sulla sicurezza i parametri ti permettono una più trasparente gestione del formato dei dati (e credo che il problema risieda proprio nei dati, come ad esempio diceva Alexmed).

Segui il link sottoriportato per maggiori delucidazioni
http://msdn.microsoft.com/en-us/library/bbw6zyha(VS.71).aspx

--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

DomA Profilo | Expert

Vi posto 2 img dell'errore (screenshot del debug) sperando possano essere utili.
Ho provato ad inserire "A" in tutti i campi (quindi senza apici) ma l'errore rimane.
Comunque grazie per la disponibilità.
Ciao


1024x768 178Kb



1024x768 83Kb

Domenico

Teech Profilo | Expert

Qual'è il valore di QueryString2 in quel momento?
Comunque torno a consigliarti l'uso dei parametri...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

alexmed Profilo | Guru

Son d'accordo per i parametri

queryString2 = "INSERT INTO DatiP (Denominazione, Indirizzo, Local, CodFisc, PartIva, Telefono, Fax, Mail) VALUES" & _
"(@Denominazione, @Indirizzo, @Local, @CodFisc, @PartIva, @Telefono, @Fax, @Mail)"

Dim cmdInsDati As New OleDb.OleDbCommand(queryString2, Conn2)

cmdInsDati.Parameters.Add("@Denominazione", OleDb.OleDbType.Char).Value = Me.TextBox1.Text
cmdInsDati.Parameters.Add("@Indirizzo", OleDb.OleDbType.Char).Value = Me.TextBox2.Text
cmdInsDati.Parameters.Add("@Local", OleDb.OleDbType.Char).Value = Me.TextBox3.Text
cmdInsDati.Parameters.Add("@CodFisc", OleDb.OleDbType.Char).Value = Me.TextBox4.Text
cmdInsDati.Parameters.Add("@PartIva", OleDb.OleDbType.Char).Value = Me.TextBox5.Text
cmdInsDati.Parameters.Add("@Telefono", OleDb.OleDbType.Char).Value = Me.TextBox10.Text
cmdInsDati.Parameters.Add("@Fax", OleDb.OleDbType.Char).Value = Me.TextBox9.Text
cmdInsDati.Parameters.Add("@Mail", OleDb.OleDbType.Char).Value = Me.TextBox8.Text

Ciao

alexmed Profilo | Guru

o anche no!!!

prova questa:

queryString2 = "INSERT INTO DatiP (Denominazione, Indirizzo, Local, CodFisc, PartIva, Telefono, Fax, Mail) VALUES" & _
"('" & Nome & "', '" & Ind & "', '" & Loc & "', '" & CF & "', '" & PI & "', '" & Tel & "', '" & Fax & "', '" & mail & "')"

Nel senso
Prova a farti restituire la stringa della Query e verifica che sia completa e corretta

DomA Profilo | Expert

>Prova a farti restituire la stringa della Query e verifica che sia completa e corretta

Ci avevo pensato e la stringa risulta essere corretta. Anche la stringa di connessione è corretta.
Ho provato anche con i parametri ma nulla da fare...
sempre lo stesso problema.
Però forse sbaglio potreste inviarmi un esempio?
Grazie
Domenico

alexmed Profilo | Guru

Ciao
A questo punto se non riesci a risolvere ti consiglio di aprire un Thread nella stanza SQL.
Sicuramente Lorenzo Benaglia ti darà una risposta.

Cmq lo schema che uso generalmente io è questo

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Spero ti possa aiutare

lbenaglia Profilo | Guru

>A questo punto se non riesci a risolvere ti consiglio di aprire
>un Thread nella stanza SQL.
>Sicuramente Lorenzo Benaglia ti darà una risposta.

E chi sono, Babbo Natale?
Senza il dump della stringa di INSERT non è possibile risalire all'errore di sintassi, e comunque suggerisco di incapsulare il comando in una Query parametrica come nel seguente esempio:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=13913

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alexmed Profilo | Guru

Ciao Lorenzo
Magari Babbo Natale no (anche se tra ormai meno di due mesi è Natale)
Ma qualche potere cè l'hai dal momento che basta scrivere il tuo nome è tu compari!!!!!
Anche in America negli anni sessanta (se ricordo bene il periodo) bastava urlare: "Superman aiutami!!!!"
E Lui arrivava.

Ciao

lbenaglia Profilo | Guru

>Ma qualche potere cè l'hai dal momento che basta scrivere il
>tuo nome è tu compari!!!!!

Il potere è tutto nel messaggio privato che mi ha mandato Domenico

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alexmed Profilo | Guru



Io pensavo che i nemici li incapsulavi in una query parametrica!!!!

DomA Profilo | Expert

Sfortunatamente ho ancora l'errore "Errore di sintassi nell'istruzione into"
Ecco il codice modificato:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Un'ultima spiegazione perche succede solo con questa tabella?

Ciao
Domenico

lbenaglia Profilo | Guru

>Un'ultima spiegazione perche succede solo con questa tabella?
Come ho scritto poco sopra "Senza il dump della stringa di INSERT non è possibile risalire all'errore di sintassi"
Se ci alleghi un file zip con l'mdb sarebbe ancora meglio

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Teech Profilo | Expert

Ma non è che "Local" sia anche una parola riservata? Prova a cambiare il nome a questo campo...
P.S.: Molto meglio il codice così

--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

DomA Profilo | Expert

Voglio ringraziare tutti voi per l'aiuto. Seguendo i vostri consigli ho risolto il problema. Ho impostato i parametri, ho cambiato il nome del campo Local in posizione ed ora tutto sembra funzionare. Peccato che debba accettare una sola risposta perchà tutte mi sono state utili per apprendere qualcosa che non conoscevo.
Ciao

per Lorenzo Benaglia: sei meglio di Babbo Natale

alexmed Profilo | Guru

DoMa: anche noi temiamo i superpoteri di Lorenzo!!!
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5