Newsgroup: it.comp.lang.visual-basic
Titolo: mi controllate la query di inserimento?

perchè questa routine mi restituisce quest'errore?
"nessun valore specificato per alcuni parametri"
Private Sub Command1_Click()
Dim inc As Boolean
If OptNo = True Then
inc = False
Else
inc = True
End If
 rscmd.CommandText = "INSERT INTO Clienti VALUES(' " & TxtCognome.Text & "
',' " & txtNome.Text & " ',' " & txtvia.Text & " ',' " & txtCivico.Text & "
',' " & txtCitta.Text & " ',' " & txtCap.Text & " ',' " & txtProvincia.Text
& " ',' " & txtTel.Text & " ',' " & txtScadenzaPolizza.Text & " ',' " &
lblData.Caption & " ',' " & txtNumPolizza.Text & " ',' " & cmbComp.Text & "
',' " & txtCodFiscale.Text & " ',' " & txtNote.Text & " ',inc)"
 rscmd.Execute
End Sub

 perchč questa routine mi restituisce quest'errore?


 ha scritto nel messaggio
news:Dwtp7.47873$7Y3.3...@news2.tin.it...



E cioè stai passando un valore nullo??
CA

Il problema non è nessun valore nullo, è semplicemente la sintassi, non passi i
campi
della tabella in cui devono andare i valori
la tua sintassi : INSERT INTO Tabella VALUES(Valore1,Valore2,...)
 
sintassi corretta : INSERT INTO Tabella (Campo1,Campo2,...)
VALUES(Valore1,Valore2,...)
-- 
Posted from  [217.57.33.234] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 dov'è l'errore e come risolverlo?
[SNIP]
l'interfaccia del tuo programma evidentemente consente l'inserimento di
valori nulli in uno o piu' campi e quindi la stringa SQL potrebbe, a seconda
dei casi, risultare scorretta.
Siccome l'inserimento di campi vuoti puo' essere perfettamente lecito nella
logica della tua applicazione, devi risolvere il problema in fase di
generazione del comando; tieni presente che:
a) Un campo testo vuoto in una stringa SQL non puo' essere indicato con '',
ma con la parola chiave NULL (senza apici), ad esempio:
INSERT INTO Clienti VALUES ('Dormio','Luca',NULL,'Genova' ...
b) Se un campo testo contiene un apice, tale carattere deve essere
raddoppiato per non incorrere in errore di sintassi, esempio:
INSERT INTO Clienti VALUES ('D'Amore','Pippo' .... '*ERRORE*
INSERT INTO Clienti VALUES ('D''Amore','Pippo' .... '*CORRETTO*
Detto questo ti conviene crearti una piccola funzione da applicare a tutti i
campi testo in modo da sistemare automaticamente questi casi particolari, un
sistema potrebbe essere questo:
Function SQLText(ByVal strText As String) As String
If Len(strText) = 0 Then
    'senza apici
    SQLText = "NULL"
Else
    'raddoppiamo gli apici, se presenti
    strText = Replace(strText, "'", "''")
    'in ogni caso aggiungiamo l'apice iniziale e finale
    SQLText = "'" & strText & "'"
End If
End Function
e quindi applicala la funzione solo ai campi alfanumerici cosi':
rscmd.CommandText = "INSERT INTO Clienti VALUES(SQLText(TxtCognome.Text) _
    & "," & SQLText(txtNome.Text) & "," & SQLText(txtvia.Text)
    & "," & txtCivico.Text & "," & SQLText(txtCitta.Text) & ....
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett Brown

 VALUES(Valore1,Valore2,...)
Questo pero' non risolve il problema, se Valore2 e' nullo la stringa non
risulta corretta.
A questo punto dovresti fare prima una scansione di tutti i campi NULL per
poterli escludere dall'elenco dei campi e dei valori; tanto vale sistemare
direttamente il valore con una funzione tipo quella che accennavo nell'altro
messaggio...


Si, tu puoi anche fare tutti i controlli che vuoi sui valori NULL, ma se la
sintassi della INSERT è sbagliata ti attacchi... 


 sintassi della INSERT č sbagliata ti attacchi...


 sintassi della INSERT è sbagliata ti attacchi...
Temo che non ci siamo capiti...
INSERT INTO Tabella VALUES(Valore1,Valore2,...)
INSERT INTO Tabella (Campo1,Campo2,...) VALUES (Valore1,Valore2,...)
queste sintassi sono *entrambe* corrette e fanno parte dello standard SQL;
la prima indica implicitamente che, nella clausula VALUES, verranno elencati
tutti i campi della tabella, nell'ordine stabilito in fase di definizione.
Quindi il problema e' proprio l'opposto:
tu puoi anche usare la sintassi che preferisci per fare l'INSERT ma se uno
dei valori e' NULL e invece usi '' ti attacchi...


Inoltre nell'esempio proposto sopra il problema valore nullo non sussiste
perchč
sono tutte TextBox che quindi al piů restituiranno stringa vuota e non di certo
NULL


 NULL
Appunto!!
dato che continuiamo a non capirci, prova un po' questa insert sul tuo
database e dimmi se funziona:
INSERT INTO Tabella (Campo1,Campo2) VALUES ('Pippo','')
ora, dato che non funzionera', prova questa
INSERT INTO Tabella (Campo1,Campo2) VALUES ('Pippo',NULL)
funziona, vero?
Il problema sta tutto qui: le stringhe vuote non sono accettate nella
sintassi delle query di aggiornamento, devi tradurre la stringa vuota dei
TextBox nella parola NULL oppure escludere del tutto il campo dall'elenco...


 ..
